代码
float x = 3.141592653589793238;
double z = 3.141592653589793238;
printf("x=%f\n", x);
printf("z=%f\n", z);
printf("x=%20.18f\n", x);
printf("z=%20.18f\n", z);
Run Code Online (Sandbox Code Playgroud)
会给你输出
x=3.141593
z=3.141593
x=3.141592741012573242
z=3.141592653589793116
Run Code Online (Sandbox Code Playgroud)
输出的第三行741012573242
是垃圾,第四行116
是垃圾.双打总是有16个有效数字,而浮点数总是有7个有效数字吗?为什么双打没有14位重要人物?
给定一个真实值,我们可以检查float
数据类型是否足以存储数字,或者double
是否需要?
我知道精度因建筑而异.是否有任何C/C++函数来确定正确的数据类型?
将数字从双精度浮点格式转换为单精度浮点格式会导致精度损失.用于实现此转换的算法是什么?
数字是大于3.4028234e+38
还是小于-3.4028234e+38
简单地减少到各自的限制?我觉得转换过程比这更复杂,但我找不到它的文档.
floating-point type-conversion double-precision ieee-754 single-precision