猿问

为什么不会停下

#include<stdio.h>

int main()

{

    double i;

    for(i = 0; i != 10; i += 0.1)

        printf("%.1f\n", i);

    return 0;

}


qq_放心不下_kuHQY1
浏览 735回答 1
1回答

onemoo

很可能是因为“浮点漂移”。浮点漂移是指:十进制小数并不能精确地表示为二进制浮点数(所以浮点数才有精度一说),而在连续进行浮点数运算后其误差很可能会进一步扩大。在你的例子中,即便误差并不大,但由于你用 == 进行判断,这样只有完全相同的两个浮点数才会被判断为“相等”,而之前所说的误差引起的数值差异就会导致理论上应该相等的两个浮点数被判断为不相等。如果你觉得输出的数字都很复合预期(没有什么误差)啊,那是因为你用 printf 输出的精度设置得太低,你试试用默认精度(%f)来输出看看,如果还看不出差异就用更高的输出精度试试(比如 %.15f)。
随时随地看视频慕课网APP
我要回答