こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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;
}

投稿日時 - 2008-10-21 22:28:29

QNo.4419496

すぐに回答ほしいです

質問者が選んだベストアンサー

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で出されている通りです。

投稿日時 - 2008-10-22 11:00:30

お礼

丁寧に解説いただき、ありがとうございます!

投稿日時 - 2008-11-16 22:04:27

ANo.3

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ていうか、z そのものが不要で、fx() の本体は

return 2.0 * pow(10.0, -15.0) * pow(38.6, x) - 2.73 - 0.909 * x;

で十分かと。

投稿日時 - 2008-10-21 22:57:20

お礼

うまく実行できました。
ありがとうございます。

投稿日時 - 2008-10-21 23:00:07

ANo.1

> 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;

ではないでしょうか。

投稿日時 - 2008-10-21 22:34:47

お礼

できました!ありがとうございます。パソコンが壊れてつながらなかたので回答が遅れてしまって申し訳ないです。

投稿日時 - 2008-11-16 22:03:20

あなたにオススメの質問