鱼C论坛

 找回密码
 立即注册
查看: 4707|回复: 4

我没事写个求根号的程序结果 我发现 16 求不出来(1--15测试OK!)

[复制链接]
发表于 2013-7-17 22:37:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
废话不多说直接上代码
  1. #include<stdio.h>

  2. void main()
  3. {
  4.         double i, j;
  5. star1:        i = 0.0;
  6.         j = 0.1;
  7.         int k;
  8.         printf("Please:");
  9.         scanf("%d",&k);
  10.         while(j>0.000001)
  11.         {
  12.                 if (i*i<k)
  13.                 {
  14.                         i = i +j;
  15.                 }
  16.                 else if(i*i>k)
  17.                 {
  18.                         i = i - j;
  19.                         j = j / 10;
  20.                 }
  21.                 else
  22.                 {
  23.                         j = j;
  24.                 }
  25.         }
  26.         printf("根号%d = %lf\n\n",k, i);
  27.         goto star1;
  28. }
复制代码
到底是为什么呢???
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-18 00:44:45 | 显示全部楼层
相等的情况代改下,否则死循环
  1.                 else
  2.                 {
  3.                         //j = j;                                                                             break;
  4.                 }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-18 00:58:20 | 显示全部楼层
{:7_174:}    j=j什么意思?   如楼上所说。相等的时候需要跳出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-18 08:46:10 | 显示全部楼层

原来如此   当初脑子短路 就是想着 如果相等就不要变他 忘了这样就死循环了 那没改之前根号4 = 2.0000
貌似算出来了  这又是什么情况
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-18 12:15:30 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-7-18 08:46
原来如此   当初脑子短路 就是想着 如果相等就不要变他 忘了这样就死循环了 那没改之前根号4 = 2.0000
貌 ...

0.000001不能化成有限的2进制数,所以只是近似表示,所以i=i+j;不会正好加到0.000001
所以存在偏差。

至于16,由于上述原因,也必然存在偏差,因此当i=4.0附近的时候会在i*i<k和i*i>k来回跳动多次。距离4.0越来越近。因为计算机仅仅是用有限的位数表示浮点数,因此在震荡几次后,由于表示位数的有限性,i会正好和4.0的二进制表示相同,此时进入i*i==j的分支。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-19 00:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表