Neverturnback 发表于 2018-3-19 20:33:25

for(j=0.001 ; ; j=j+0.001),在第三次循环时j的值变成了0.0030000000000000001

#include <stdio.h>
#include <conio.h>
#include <math.h>

void main()
{
        double i, m, n, j;
        int k,l=0;
        char c;
        k = 0;
        printf("输入任意键开始(ESC除外)\n");
        while((c=getch())!=27)
        {
                printf("利用迭代法把一个数开方(精度0.001)\n");
      printf("请输入一个数:");
                scanf("%lf", &m);
                for(j=0.001 ; j<=m ; j=j+0.001 )
                {
                        for(i=0.001 ; ; i=i+0.001)
                        {
                                n = j / i;
                                if(j<0.009)
                                {
                                        break;
                                }
                                if((n-i)<=0.001)
                                {
                                        break;
                                }
                        }
                        printf("%0.3lf ", n);
                        k++;
                        if(0 == k%10)
                        {
                                printf("\n");
                                l++;
                        }
                }
                printf("\n");
                printf("%d", l);
                printf("\n");
                printf("输入任意键继续(ESC除外)\n");
                c = getch();
        }
}
如图第三次循环时多了0.0000000000000000001;
前两次循环都是正常的;
这是为什么啊?
哪位大佬解答一下QWQ;
谢谢!

ba21 发表于 2018-3-19 21:15:17

可以看得出,那是编译器精确的长度。

Neverturnback 发表于 2018-3-19 21:18:58

ba21 发表于 2018-3-19 21:15
可以看得出,那是编译器精确的长度。

啥意思?qwq

ba21 发表于 2018-3-19 21:46:12

Neverturnback 发表于 2018-3-19 21:18
啥意思?qwq



意思就是你有你有精确度%2.f;编译器有编译器的精确度。叫你不要深究

Neverturnback 发表于 2018-3-20 20:10:53

ba21 发表于 2018-3-19 21:46
意思就是你有你有精确度%2.f;编译器有编译器的精确度。叫你不要深究

哦哦qwq
页: [1]
查看完整版本: for(j=0.001 ; ; j=j+0.001),在第三次循环时j的值变成了0.0030000000000000001