【发布时间】:2021-04-11 19:54:48
【问题描述】:
我写了这样一个代码来查找网格步长(两个相邻的机器可表示数之间的差,机器 epsilon 是大于一和一的最小机器可表示数之间的差)。这个程序有多正确?
#include <stdio.h>
int main(void)
{
long double x,eps=1.0,a;
scanf("%Le",&x);
if(x>=1.8446744e+19) eps=x;
do
{
a=eps;
eps/=2.0;
}
while( x+eps>x);
printf("Grid step: %Le",(long double)a);
return 0;
}
【问题讨论】:
-
在开始循环之前,测试条件是否为真。在此基础上,决定是使用现有循环,减少
eps,直到测试失败,还是使用新循环,增加eps,直到测试成功。
标签: c visual-c++ floating-point double ieee-754