#include<stdio.h>
#include<stdlib.h>
#define abs(a) ((a)>0 ? a: -a)
#define eps_sqrt 0.00000000000001
#define it 100
float sqrt(float x)
/*The Square Root Function using the Newton's Method*/
{
int it_sqrt=0;
float a_sqrt = x/2;
while ((abs((a_sqrt*a_sqrt)-(x))>=eps_sqrt) && (2.0*a_sqrt != 0) && (it_sqrt<=it))
{
a_sqrt = a_sqrt - ((a_sqrt*a_sqrt)-(x)/(2.0*a_sqrt));
it_sqrt++;
}
return a_sqrt;
}
int main()
{
printf("%.5f\n", sqrt(5));
system ("pause");
}
私はニュートンの反復法を使ってPython上の平方根を見つけようとしましたが、うまく機能しました。 私はCで新しく、なぜこの機能がうまくいかないのか分かりません。 私はそれを実行するたびに、 "-1。#INF0A"を返します 助けていただければ幸いです。関数と浮動小数点の比較
編集:私は0.000001
にEPSをCHANGINしようと、それはまた、うまくいきませんでした。
に私はそれを試してみましたが、それはまだ同じ結果に –
間違ったマクロ関数ABS引数を与えます。私の答えを見てください。 – BLUEPIXY
あなたの自家製の 'abs'マクロを使用しないで、その引数を2回評価します。 Cライブラリには 'fabs'があります。これは通常組み込み型なので、パフォーマンスは同じですが安全です。 –