【发布时间】:2023-03-21 12:39:01
【问题描述】:
我正在解决一个处理浮点下溢的 C Primer Plus 练习。任务是模拟它。我是这样做的:
#include<stdio.h>
#include<float.h>
int main(void)
{
// print min value for a positive float retaining full precision
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision:",FLT_MIN);
// print min value for a positive float retaining full precision divided by two
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision divided by two:",FLT_MIN/2.0);
// print min value for a positive float retaining full precision divided by four
printf("%s\n %.150f\n", "Minimum positive float value retaining full precision divided by four:",FLT_MIN/4.0);
return 0;
}
结果是
Minimum positive float value retaining full precision: 0.000000000000000000000000000000000000011754943508222875079687365372222456778186655567720875215087517062784172594547271728515625000000000000000000000000
Minimum positive float value retaining full precision divided by two: 0.000000000000000000000000000000000000005877471754111437539843682686111228389093327783860437607543758531392086297273635864257812500000000000000000000000
Minimum positive float value retaining full precision divided by four: 0.000000000000000000000000000000000000002938735877055718769921841343055614194546663891930218803771879265696043148636817932128906250000000000000000000000
我预计最小浮点值除以二和四的精度较低,但似乎精度还可以,并且没有下溢情况。这怎么可能?我错过了什么?
非常感谢
【问题讨论】:
-
与原型中的函数参数不匹配的参数将进行默认提升。
-
@Kerrek SB 您的评论是正确的,但如果代码使用 IEEE 754 binary32,则不会影响 OP 所谓的缺乏“预期较低的精度”。