- ベストアンサー
Cプログラミングの質問です。
方程式2.0*pow(10,-15)*pow(38.6,x)-2.73-0.909x=0の解xを二分法により求め、それを”atai=××”と表示させるプログラムを書こうと思っているのですが、エラーがでてしまい、さらにどこを直していいかわかりません。 詳しい方がおられましたら、アドバイスをいただけたらと思います。よろしくお願いいたします。 <エラー内容> 「コンパイルしています... tom.cpp .\tom.cpp(34) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(575): 'long double pow(long double,int)' の可能性があります。 C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(527): または 'float pow(float,int)' C:\Program Files\Microsoft Visual Studio 8\VC\include\math.h(489): または 'double pow(double,int)' 引数リスト '(int, int)' を一致させようとしているとき .\tom.cpp(34) : error C2059: 構文エラー : 'サフィックスが無効です。' .\tom.cpp(34) : error C2146: 構文エラー : ';' が、識別子 'x' の前に必要です。 ビルドログは "file://c:\Documents and Settings\satoutakaaki\デスクトップ\file\tom\tom\Debug\BuildLog.htm" に保存されました。 tom - エラー 3、警告 0」 <プログラム> #include "stdafx.h" #include <stdio.h> #include <math.h> double fx(double x); int main (void){ double x1=-1000; double x2=1000; double xn; double y; int i=0; for(i=1;i<100;i++) { xn=0.5*(x1+x2); y=fx(xn); if(y>0) {x1=x1/2+x2/2;} if(y<0) {x2=x1/2+x2/2;} i=i+1; } printf("atai=%f",xn); return 0; } double fx(double x) { double z; z=2.0*pow(10,-15)*pow(38.6,x)-2.73-0.909x; return z; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
http://msdn.microsoft.com/ja-jp/library/dt5dakze(VS.80).aspx より: -- Visual C++ 2005 では、ISO 標準にさらに準拠するために大きく変更されています。pow(int, int) のオーバーロードは、使用できなくなりました。このオーバーロードを使用している場合、コンパイラは C2668 を発生することがあります。この問題を回避するには、最初のパラメータを double、float、または long double にキャストします。 -- ってことなので、最初のpow(10,-15)がエラーの原因です。 回避というか解消方法は既に#1/#2で出されている通りです。
その他の回答 (2)
- asuncion
- ベストアンサー率33% (2127/6289)
ていうか、z そのものが不要で、fx() の本体は return 2.0 * pow(10.0, -15.0) * pow(38.6, x) - 2.73 - 0.909 * x; で十分かと。
お礼
うまく実行できました。 ありがとうございます。
- asuncion
- ベストアンサー率33% (2127/6289)
> z=2.0*pow(10,-15)*pow(38.6,x)-2.73-0.909x; z = 2.0 * pow(10.0, -15.0) * pow(38.6, x) - 2.73 - 0.909 * x; ではないでしょうか。
お礼
できました!ありがとうございます。パソコンが壊れてつながらなかたので回答が遅れてしまって申し訳ないです。
お礼
丁寧に解説いただき、ありがとうございます!