编了一个牛顿迭代法求根的c程序,不知道为啥输出老是-1.#ind00

编了一个牛顿迭代法求根的c程序,不知道为啥输出老是-1.#ind00,第1张

牛顿迭代法 是切线法,只有当 迭代区间 各点 存在 一阶导数,且 一阶导数 不为 0 时 才能 收敛,得到 解。

并非所有 函数 都能 用 牛顿迭代法。

你的程序,可以检查 f1, 若 f1 接近 0 时 就会发生溢出。 你可尝试改变迭代初值x, 让迭代过程避开 一阶导数 为 0 的点。

用^表示幂,当b^2-4ac≥0时的根为.x=(-b±√(b^2-4ac))/(2a)称为一元二次方程的求根公式当b^2-4ac>0时,有两个不同的根当b^2-4ac=0时,有两个相同的根当b^2-4ac<0时,没有实数根Private Sub Command1_Click()

Dim a, b, c

a = CDbl(InputBox("输入a值:"))

b = CDbl(InputBox("输入b值:"))

c = CDbl(InputBox("输入c值:"))

If b ^ 2 - 4 a c < 0 Then

Print "没有实根"

Else

Print "X1=" & (-b + Sqr(b ^ 2 - 4 a c)) / (2 a)

Print "X2=" & (-b - Sqr(b ^ 2 - 4 a c)) / (2 a)

End IfEnd Sub

早说嘛,还以为你不懂pow!

pow()的原理的源代码:

double my_pow(double x, double y)

{

register double ret, value;

double r = 10;

long p = (long) y;

if (x == 00 && y > 00)

return 00;

if (y == (double) p)

{

if (p == 0)

return 10;

if (p < 0)

{

p = -p;

x = 10 / x;

}

while (1)

{

if (p & 1)

r = x;

p >>= 1;

if (p == 0)

return r;

x = x;

}

}

__asm__(

"fmul %%st(1);"

"fst %%st(1);"

"frndint;\n\t"

"fxch;\n\t"

"fsub %%st(1);\n\t"

"f2xm1;\n\t"

: "=t" (ret), "=u" (value)

: "0" (log2 (x)), "1" (y)

);

ret += 10;

__asm__(

"fscale"

: "=t" (ret)

: "0" (ret), "u" (value)

);

return ret;

}

//这是一个求x的y次幂的函数,因为要求是浮点数类型的,所以代码复杂了许多。

//如果仅仅是求整数的x的y次幂,那么就简单了许多。

int main()

{

printf("%f\n",my_pow(00,00));

printf("%f\n",my_pow(10240,00));

printf("%f\n",my_pow(20,100));

printf("%f\n",pow(25,126));

printf("%f\n",my_pow(25,126));

system("pause");

return 0;

}

sqrt()原理的源代码:

本程序在Dev C++ 4992 下编译通过

double my_sqrt(double x)

{

register double ret;

__asm__(

"fsqrt"

: "=t" (ret)

: "0" (x)

);

return ret;

}//计算x的平方根。

int main()

{

double a = 4;

printf("sqrt(%f) = %f\n",a,my_sqrt(a));

a = 81;

printf("sqrt(%f) = %f\n",a,my_sqrt(a));

a = 12345678;

printf("sqrt(%f) = %f\n",a,my_sqrt(a));

system("pause");

return 0;

}

让输入 abc 三个常数

然后用if 判断B^2-4ac

>0 x1=(-b+B^2-4ac)/4ac x2=(-b-B^2-4ac)/4ac

=0 x1=x2=(-b+B^2-4ac)/4ac

<0 提示 无实根

以上就是关于编了一个牛顿迭代法求根的c程序,不知道为啥输出老是-1.#ind00全部的内容,包括:编了一个牛顿迭代法求根的c程序,不知道为啥输出老是-1.#ind00、用vb编写一个程序求一元二次方程ax2+bc+c=0的根、math.h 中求根n是怎么求的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9478294.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存