为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不会停下

为什么不会停下

C
qq_放心不下_kuHQY1 2019-01-14 15:01:39
#include<stdio.h>int main(){    double i;    for(i = 0; i != 10; i += 0.1)        printf("%.1f\n", i);    return 0;}
查看完整描述

1 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

很可能是因为“浮点漂移”。浮点漂移是指:十进制小数并不能精确地表示为二进制浮点数(所以浮点数才有精度一说),而在连续进行浮点数运算后其误差很可能会进一步扩大。

在你的例子中,即便误差并不大,但由于你用 == 进行判断,这样只有完全相同的两个浮点数才会被判断为“相等”,而之前所说的误差引起的数值差异就会导致理论上应该相等的两个浮点数被判断为不相等。


如果你觉得输出的数字都很复合预期(没有什么误差)啊,那是因为你用 printf 输出的精度设置得太低,你试试用默认精度(%f)来输出看看,如果还看不出差异就用更高的输出精度试试(比如 %.15f)。

查看完整回答
1 反对 回复 2019-01-14
  • 1 回答
  • 0 关注
  • 734 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信