鱼C论坛

 找回密码
 立即注册
查看: 3641|回复: 13

用迭代法求a的立方根,最后运行有点小问题

[复制链接]
发表于 2017-11-5 15:28:19 | 显示全部楼层 |阅读模式

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

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

x
一下我我码出来的代码:
#include <stdio.h>
#include <math.h>
int main()
{
    printf("a=");
    float x0,x1=1,a;
    scanf("%f",&a);
x0=a;
    do
    {

        x1=2*x0/3+a*2/(3*x0*x0);
        x0=x1;
    }while(fabs(x1-x0)>=0.00001);
    printf("a的立方根为:%.3f",x1);
    return 0;
}
然而运行出来却算不对数,按理来说8的立方根不是应该是2吗?
QQ截图20171105152226.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-5 16:16:35 | 显示全部楼层
while循环的判定条件不对,应该是
fabs(a - x0 * x0 * x0)>=0.00001
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 20:38:01 | 显示全部楼层
你的迭代公式不对!
你试试 x1=x0+0.5*a/x0-0.5*x0*x0
这是牛顿迭代公式推出来的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:07:07 | 显示全部楼层
砚堂_ 发表于 2017-11-5 20:38
你的迭代公式不对!
你试试 x1=x0+0.5*a/x0-0.5*x0*x0
这是牛顿迭代公式推出来的。

还是不行,算出来甚至是负数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:33:42 | 显示全部楼层
BngThea 发表于 2017-11-5 16:16
while循环的判定条件不对,应该是
fabs(a - x0 * x0 * x0)>=0.00001

谢谢!我的迭代公式也有错,然后我根据百科里面公式推导出x1=x0-3*pow(a,-1/3)然后成功运行出8的立方根是2,但是我换输入0.0001的时候就无法求出立方根是0.1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:35:54 | 显示全部楼层
砚堂_ 发表于 2017-11-5 20:38
你的迭代公式不对!
你试试 x1=x0+0.5*a/x0-0.5*x0*x0
这是牛顿迭代公式推出来的。

还是谢谢你的提醒,我那个公式是在贴吧找的,老师给的练习题没有公式,然后我根据你的话去查百科了,看到里面有一个推导公式,然后我自己推导出来了。还是很谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 21:37:07 | 显示全部楼层
Napo鱼 发表于 2017-11-5 21:33
谢谢!我的迭代公式也有错,然后我根据百科里面公式推导出x1=x0-3*pow(a,-1/3)然后成功运行出8的立方根是 ...

我没仔细看你的迭代公式,以为没问题的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:39:50 | 显示全部楼层
BngThea 发表于 2017-11-5 21:37
我没仔细看你的迭代公式,以为没问题的。。。

那你可以帮我再看看为什么小数的立方根求不出来无法运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 21:43:27 | 显示全部楼层
Napo鱼 发表于 2017-11-5 21:39
那你可以帮我再看看为什么小数的立方根求不出来无法运行

你上面的说0.0001的立方根本来就不等于0.1
0.001的才为0.1
你先试试 0.125的是否为0.5 或者 0.008的是否为0.2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 21:46:46 | 显示全部楼层
BngThea 发表于 2017-11-5 21:43
你上面的说0.0001的立方根本来就不等于0.1
0.001的才为0.1
你先试试 0.125的是否为0.5 或者 0.008的是 ...

程序无法运行,表示enter键要被我按坏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-5 21:50:22 | 显示全部楼层
Napo鱼 发表于 2017-11-5 21:46
程序无法运行,表示enter键要被我按坏了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-5 22:03:49 | 显示全部楼层

貌似是0.001等不符合循环条件一直在死循环我还试了0等一些整数也不能
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 09:13:18 From FishC Mobile | 显示全部楼层
好奇怪哦。我回去给你发我写的代码吧!我那个能运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 09:25:30 From FishC Mobile | 显示全部楼层
噗,突然发现一个问题,你循环体里面两个式子顺序不对,导致x0==x1是恒成立的,你的迭代式只能完成一次迭代,所以除非运气好一次就算出来,否则不可能得到正确结果。
你把里面两个式子换个位置试试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-30 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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