2013-02-06 15 views
5

natknąłem się http://sourceware.org/ml/glibc-cvs/2013-q1/msg00115.html, który zawiera linięDefiniowanie wartości zmiennoprzecinkowych według podstawy oraz wykładnik wyraźnie

#define TWO5  0x1.0p5  /* 2^5  */ 

Najwyraźniej TWO5 jest zdefiniowany jako podwójne z wyraźną wartość 1<<5. Jednak po raz pierwszy widzę ten zapis. W jaki sposób ten format był używany i jaka jest jego przewaga nad pisaniem 2.5?

+0

Jest to stała pływająca C99 w systemie szesnastkowym. – nhahtdh

+0

Powiązane: [link] (http://stackoverflow.com/q/2427034/335858). – dasblinkenlight

Odpowiedz

6

Ta notacja została wprowadzona w C99. Zaletą jest to, że wartość jest wyrażana w postaci szesnastkowej, więc nie podlega ona zaokrąglaniu itp., Które występuje podczas przekształcania wartości zmiennoprzecinkowej między reprezentacją podstawową a formą dziesiętną.

Istnieje wiele stron, które opisują ten zapis, na przykład:

http://www.exploringbinary.com/hexadecimal-floating-point-constants/

3

To jest zapis heksadecymalny zmiennoprzecinkowy z C99 (chyba). Zaletą jest to, że pozwala określić takie stałe z ich dokładną reprezentowalną wartością. (cóż, zakłada to, że podstawa zmiennoprzecinkowa wynosi 2, 4, 8 lub 16 :)

2

Jest to gramatyka szesnastkowym zmiennoprzecinkowych na stałym poziomie, zgodnie z definicją zawartą w C99 draft, napisany jako wyrażenie regularne:

0[xX]([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?)[pP][+-]?[0-9]+[flFL]? 

Składa się z 4 części:

  • 0[xX]: szesnastkowy przedrostek, każda z tych 2:

     
    0x 
    0X 
    
  • ([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?): szesnastkowy stałej cząstkowej, przykładowo:

     
    34.2f 
    .de 
    b3. 
    

    albo szesnastkowym cyfrowy sekwencji (liczba całkowita szesnastkowo), na przykład:

     
    2f4 
    10 
    

    Druga część w zasadzie opisuje mantysę.

  • [pP][+-]?[0-9]+ binarnych Wykładnik (określona dziesiętnie), na przykład:

     
    p-4 
    p20 
    

    określamy szesnastkowo zmiennoprzecinkowych stałej określając mantysę w notacji heksadecymalnej, a wykładnik B (na bazie 2) dziesiętny.

  • [flFL]?: Opcjonalny przyrostek pływających, aby wskazać typ (float, double lub long double).

Powiązane problemy