2013-02-06 14 views
5

tôi stumbled khi http://sourceware.org/ml/glibc-cvs/2013-q1/msg00115.html, trong đó bao gồm dòngXác định giá trị dấu chấm động bởi cơ sở và số mũ một cách rõ ràng

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

Rõ ràng, TWO5 được định nghĩa là một đôi với giá trị rõ ràng 1<<5. Tuy nhiên, đây là lần đầu tiên tôi thấy ký hiệu này. Định dạng này đã được sử dụng như thế nào và lợi thế nào so với việc chỉ viết 2.5?

+0

Đây là hằng số động thập lục phân C99. – nhahtdh

+0

Liên quan: [link] (http://stackoverflow.com/q/2427034/335858). – dasblinkenlight

Trả lời

6

Ký hiệu này đã được giới thiệu trong C99. Ưu điểm là giá trị được biểu diễn dưới dạng thập lục phân, vì vậy nó không bị làm tròn vv xảy ra khi bạn chuyển đổi một giá trị dấu phẩy động giữa biểu diễn bên dưới và dạng thập phân.

Có rất nhiều các trang mô tả ký hiệu này, ví dụ:

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

3

Đây là ký hiệu dấu chấm động thập lục phân đi kèm với C99 (tôi nghĩ). Ưu điểm là nó cho phép xác định các hằng số như vậy với giá trị biểu diễn chính xác của chúng. (tốt điều này cho thấy rằng các điểm nổi cơ sở là 2, 4, 8 hoặc 16 :)

2

Đây là ngữ pháp của hệ thập lục phân dấu chấm động liên tục, theo quy định tại C99 draft, viết như biểu thức chính quy:

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

Bao gồm 4 phần:

  • 0[xX]: prefix Hexadecimal, một trong những 2:

     
    0x 
    0X 
    
  • ([a-fA-F0-9]*[.][a-fA-F0-9]+|[a-fA-F0-9]+[.]?): Hexadecimal liên tục phân đoạn, ví dụ:

     
    34.2f 
    .de 
    b3. 
    

    hoặc thập lục phân chữ số thứ tự (số nguyên trong hệ thập lục phân), ví dụ:

     
    2f4 
    10 
    

    Phần thứ hai về cơ bản mô tả định nghĩa.

  • [pP][+-]?[0-9]+: phần mũ nhị phân (quy định tại thập phân), ví dụ:

     
    p-4 
    p20 
    

    Chúng tôi chỉ định một thập lục phân điểm liên tục nổi bằng cách xác định mantissa trong hệ thập lục phân, và số mũ b (đối với cơ sở 2) trong thập phân.

  • [flFL]?: Hậu tố thả nổi tùy chọn, để cho biết loại (float, double hoặc long double).

Các vấn đề liên quan