牛顿迭代法求a的立方根的C语言程序?

 我来答
匿名用户
2015-11-10
展开全部
#include<stdio.h>
#include<math.h>
main()
{
float x1,x0;
int a;
printf("input a\n");
scanf("%d",&a);
if(a==0)
{
printf("a=0\n");
exit(0);
}
x1=a;
do
{
x0=x1;
x1=x0-(x0*x0*x0-a)/(3*x0*x0);
}while(fabs(x1-x0)>=1e-5);
printf("root=%f\n",x1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-21
展开全部
/* header files */#include <stdio.h>#include <stdlib.h>#include <math.h>/* functions */double cbrt_simple(double x);double cbrt_newton(double a, double x);/* main */int main(void) { double x2 = 2.0 * 2.0 * 2.0; double x3 = 3.0 * 3.0 * 3.0; double x4 = 4.0 * 4.0 * 4.0; double x5 = 5.0 * 5.0 * 5.0; printf("%.1fの立方根 (真値 = 2.0)\n", x2); printf("cbrt: %.16f\n", cbrt(x2)); printf("1/3: %.16f\n", cbrt_simple(x2)); printf("Newton: %.16f\n", cbrt_newton(x2, 10.0)); printf("\n%.1fの立方根 (真値 = 3.0)\n", x3); printf("cbrt: %.16f\n", cbrt(x3)); printf("1/3: %.16f\n", cbrt_simple(x3)); printf("Newton: %.16f\n", cbrt_newton(x3, 10.0)); printf("\n%.1fの立方根 (真値 = 4.0)\n", x4); printf("cbrt: %.16f\n", cbrt(x4)); printf("1/3: %.16f\n", cbrt_simple(x4)); printf("Newton: %.16f\n", cbrt_newton(x4, 10.0)); printf("\n%.1fの立方根 (真値 = 5.0)\n", x5); printf("cbrt: %.16f\n", cbrt(x5)); printf("1/3: %.16f\n", cbrt_simple(x5)); printf("Newton: %.16f\n", cbrt_newton(x5, 10.0)); return EXIT_SUCCESS;}/** * 1/3乗をして立方根を求める * @param[in] x 実数 * @return x の立方根 */double cbrt_simple(double x) { return pow(x, 1.0 / 3.0);}/** * ニュートン法で立方根を近似する * @param[in] a 実数 * @param[in] x 解に近そうな値 * @return a の立方根 */double cbrt_newton(double a, double x) { double e; do { e = (x * x * x - a) / (3.0 * x * x); x = x - e; } while ( fabs(e) > 1.0e-16 ); return x;}
--------
実行结果:
----------------------------------------------------------------------------------
[wtopia]$ gcc -Wall -O2 -o cbrt cbrt.c [~/src_c][wtopia]$ ./cbrt [~/src_c]8.0の立方根 (真値 = 2.0)cbrt: 2.00000000000000001/3: 2.0000000000000000Newton: 2.000000000000000027.0の立方根 (真値 = 3.0)cbrt: 3.00000000000000001/3: 3.0000000000000000Newton: 3.000000000000000064.0の立方根 (真値 = 4.0)cbrt: 4.00000000000000001/3: 3.9999999999999996Newton: 4.0000000000000000125.0の立方根 (真値 = 5.0)cbrt: 5.00000000000000001/3: 4.9999999999999991Newton: 5.0000000000000000
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
RU恶魔猎手SH
2017-12-25 · TA获得超过433个赞
知道小有建树答主
回答量:363
采纳率:85%
帮助的人:227万
展开全部
#include<stdio.h>
#include<math.h>
main()
{
float x1,x0;
int a;
printf("input a: ");
scanf("%d",&a);
if(a==0)
{
printf("a=0\n");
} else {
x1=a;
do
{
    x0=x1;
    x1=x0-(x0*x0*x0-a)/(3*x0*x0);
}while(fabs(x1-x0)>=1e-5);
printf("root=%f\n",x1);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式