- ベストアンサー
型変換の問題?
次のプログラムなんですが #include <stdio.h> #include <math.h> #include <cstdlib> #include <iostream.h> void main(){ double v[10000]; for(int b=0;b<10000;b++){ v[b]=2.5+0.01*(double)(rand()%249+1);} for(b=0;b<10000;b++){ int c=(int)(100.*v[b])-251; if(c==192){printf("%d %f\n",c,v[b]);} }} 私の環境のVC++6.0 on win2kのもとで やってみると、printf("%d %f\n",c,v[b])のところで 192 4.43 となったり 192 4.42 となったりします。 真の値は、192 4.43のつもりでプログラムを組んだのですが、 なぜかc=(int)(100.*v[b])-251;という写像は 単射になっていないようです。 さて、質問ですが、double→int型の型変換に原因があるのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- ranx
- ベストアンサー率24% (357/1463)
回答No.4
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
回答No.2
- shige_70
- ベストアンサー率17% (168/946)
回答No.1
お礼
そうやって誤差を表示すれば一目瞭然です。 ありがとうございました。 >#縮小変換はVCではワーニングがでませんか? いや、でないです。 しかし、わずか小数点2桁で誤差が 発生するとは驚きです。