2016-08-23 55 views

Odpowiedz

-1

Większość operatorów takich jak + -/* to również operatorzy matematyczni, ale są również łatwo dostępni. Podczas programowania używasz tyle matematyki, że programiści zaczęli rozróżniać matematykę, która jest potrzebna do codziennych rzeczy i matematyki, która jest bardziej wyspecjalizowana, że ​​używasz tylko trochę czasu. Abs to jedna z tych funkcji, które są często używane. Podobnie jak przy arytmetyce wskaźnika, gdy chcesz poznać różnicę, aby obliczyć rozmiar bloku pamięci. Ale nie zależy ci na tym, by wiedzieć, która pamięć jest wyższa, a która mniejsza.

Podsumowując: abs jest często używany, ponieważ oblicza różnicę dwóch liczb całkowitych. Różnica między dwoma wskaźnikami na przykład jest również liczbą całkowitą. I tak jest w stdlib.h. fabs jakkolwiek nie jest czymś, czego będziesz potrzebował dużo, chyba że robisz matematykę. Tak jest w matematyce.

+0

To nie odpowiada, dlaczego te funkcje są w oddzielnych plikach. – HolyBlackCat

+0

@HolyBlackCat: Teraz robi :) –

5

pojawia się po raz pierwszy w 7. badaniu Unix. Trudno powiedzieć, jak się tam dostało. Na przykład [1] twierdzi, że fragmenty biblioteki C zostały scalone z "PWB/Unix", który zawierał troff i kompilator C pcc, ale nie mogę tego udowodnić.

Inną ciekawą informacją jest instrukcja biblioteka z V7 Unix: intro.3:

(3) These functions, together with those of section 2 and those marked (3S), 
     constitute library libc, which is automatically loaded by the C compiler 
     cc(1) and the Fortran compiler f77(1). The link editor ld(1) searches 
     this library under the `-lc' option. Declarations for some of these 
     functions may be obtained from include files indicated on the appropri- 
     ate pages. 

< ...>

(3M) These functions constitute the math library, libm. They are automati- 
     cally loaded as needed by the Fortran compiler f77(1). The link editor 
     searches this library under the `-lm' option. Declarations for these 
     functions may be obtained from the include file <math.h>. 

Jeśli spojrzeć na V7 komendy Makefile tylko kilka programów C jest połączonych z flagą -lm. Więc mój wniosek jest spekulacyjny:

  1. libm.a (i math.h) był potrzebny przede wszystkim do FORTRAN programów Głównie dlatego rozdzielono na biblioteki w celu zmniejszenia emisji dwutlenku binarny (zauważ, że została ona powiązana statycznie).
  2. Niewiele urządzeń miało wsparcie zmiennoprzecinkowe. Na przykład, musisz kupić opcjonalny FPP dla PDP-11 [2], istnieje również biblioteka symulacji libfpsim w Uniksie, aby złagodzić to, więc zmiennoprzecinkowe mogą być prawie nieużywane we wczesnych programach C.

1. A History of UNIX before Berkeley: UNIX Evolution: 1975-1984

2. PDP-11 architecture