当我在 C 中定义无法在十进制系统中准确表示的常量时,例如 π
,编译器将考虑多少位数字来实际创建 float内存中的
或 double
?
例如:
/* Overkill? */
const float PI_F = 3.1415926535897932384626433832795f;
/* Too few digits? */
const double PI_D = 3.14159;
最佳答案
假设IEEE 754 standard floating point numbers ,这在当今很常见,float
的精度约为 7.22 位,double
的精度为 15.95,因此 的目标是小数点后 7 位float
π 常数,为安全起见,double
为 15。 128 位 long double
的精度为 34.02,因此 π 中小数点后有 33 位。(*)
但是,过多的精度不会造成伤害,编译器只会将其截断。
(*) 请注意,long double
通常不是 IEEE 格式; x86-32 通常具有 80 位,而不是 128 位,long double
。在 MSVC 中,它是 apparently double
的同义词,因此 64 位。
关于c - 定义浮点常量,多少位有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314257/