プロが教えるわが家の防犯対策術!

#include <stdio.h>
#include <math.h>
#include <time.h>
double pow_2_53 ;
double pow_2_1022 ;
double pow_2_1074 ;
double abssucc(double x){
return x / (1 - pow_2_53);
}
double abspred(double x){
return x * (1 - pow_2_53);
}
double succ (double x){
if(abs(x) < pow_2_1022) return x + pow_2_1074;
if (x >= 0) return abssucc(x);
else return abspred(x);
}
double pred(double x){
if(abs(x) < pow_2_1022) return x - pow_2_1074;
if (x >= 0) return abspred(x);
else return abssucc(x);
}

int main(){
pow_2_53 = pow(2,-53);
pow_2_1022 = pow(2,-1022);
pow_2_1074 = pow(2,-1074);
clock_t start, end;


double r= 0;
int i=0;
start = clock();

for(i;i<1000000;i++){

r= succ(1);

printf("%.50f\n",r);

}end = clock();
printf("ループ100万回の時間: %f秒\n", (double)(end - start) / CLOCKS_PER_SEC);

}

このプログラムを動かしたいのですが、動きません。どこがおかしいのでしょうか?
教えて下さい!

A 回答 (4件)

pow_2_53 = pow((double)2,(double)-53);


pow_2_1022 = pow((double)2,(double)-1022);
pow_2_1074 = pow((double)2,(double)-1074);


引数の型が違うので(pow関数の引数は両方ともdouble)、違う関数とみなされたからエラーがでました。ライブラリ関数を使う場合は引数の型をチェックしましょう。

http://simd.jugem.jp/?eid=33
    • good
    • 0

以前の質問、



http://oshiete.goo.ne.jp/qa/6860931.html

の、No.3 の指摘も反映させた方が良いかもしれませんね
(エラーはエラーのままだろうけど)

あと、No.1 の(ベストアンサーに選んだのだから)回答も最後もまで読んだ方が良いかもしれません。
(これもエラーの表示とは直接関係ないけど)

そして、もしかして、計算のスピードを評価しようとしているのなら、時間を計る部分でひたすら printf() を繰り返すのは、計算のスピードじゃなくて、表示のスピードを計測しているだけだと思いますが。
    • good
    • 0

「エラーが出て動作しない」じゃわからん. なんでメッセージひとつまともに書けないんだろう. それとも, あなたは「エラーが出て動作しない」といわれてすべて理解できる超能力を持っているのですか? もしそうだとしても, この世界にそれほどの超能力の持ち主は多くないだろうことを認識してください.



C なら pow に整数を引数として与えても自動的に変換しなければなりません. つまり, エラーにならないのが正しい動作です>#2.
    • good
    • 0

「動きません」とは, どういうことでしょうか? もっと具体的にお願いします.

この回答への補足

このプログラムを走らせようとしても、エラーが出て動作しないということです。

補足日時:2011/07/13 15:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!