マシンイプシロンを求めるプログラムについて以下のコードを書きました
xがイプシロンの代わりです。
出てきた結果としては2.00000000000000000000e+00
となったのですが、違ってると思うのですが何故でしょう
include <stdio.h>
include <math.h>
int main(void){
double x=1.0;
double y=x+1.0;
while(y==1.0){
x=x/2.0;
}
printf("%.20e",x*2.0);
return 0;
}
そのコードを目で(またはデバッガで)追って、whileループの中身が何回(ぐらい)実行される(はず)かを確認することをお勧め致します。
0回でした何故でしょうか。。。
yは2.0なんだから、while(y==1.0) でループするわけがない。
(そこは自力で気づかないと目標にたどり着けないと思います)
もしかしてwhileの条件の書き方を勘違いされているのかもしれません。(…がその辺を明確にするために)「求めるためにどんな手順を使おうとした」か、一度日本語で書き下して(それを質問欄に追記して)みていただけますか?
whileの()の中の条件になっているときは中の処理が行われるのですね!
てっきり()の条件になるまでだと思っていました。。。
知識不足でしたすいません。。
SHOMIさんe-wattさん丁寧にありがとうございます!!
>てっきり()の条件になるまでだと思っていました。。。
だとすると今度はdouble y=x+1.0;の動作も誤解していそうなんですが…
後からからxの値を変えてもyの値は変化しないことは理解されていますか?
はい!!!ですのでwhile分の中にy=x+1.0を入れてみたところ無事動作しました!
ありがとうございます!!
回答1件
あなたの回答
tips
プレビュー