【发布时间】:2021-04-11 17:06:26
【问题描述】:
我写了这样一个代码来查找网格步长(两个相邻的机器可表示数之间的差,机器 epsilon 是大于一和一的最小机器可表示数之间的差)。为什么这个程序对于 x 的巨大值显示 1 以及如何修复它以显示正确答案?
#include <stdio.h>
int main(void)
{
long double x,eps=1.0,a;
scanf("%Lg",&x);
do
{
a=eps;
eps/=2.0;
}
while( x+eps>x);
printf("Grid step: %Le",(long double)a);
return 0;
}
【问题讨论】:
-
请不要标记 C 和 C++,除非询问两种不同语言之间的差异或交互。
-
对不起。 c 和 c++ 是非常接近的语言,因为我写
-
请选择一个保留并删除另一个标签。尽管这个问题根本不是关于 C 或 C++ 的;您可以添加浮点标签 [floating-point] 和 [ieee-754] 并删除语言标签(但在问题中提到正在使用 C 或 C++ 代码)。