重複の可能性:
Visual Studio 2008 で .9 - .8999999999999995 = 0.0000000000000055511151231257827 と表示されるのはなぜですか?
1.82 のような単純な double が 1.819999999645634565360 になるのはなぜですか?
次のプログラムをコンパイルして実行すると、非常に奇妙な動作が発生します。
#include <iostream>
#define DIV 10000ll
long long gcd(long long a, long long b) {
if(b==0) return a;
else return gcd(b, a % b);
}
int main() {
int t;
std::cin >> t;
while(t--) {
double n1;
std::cin >> n1;
long long inum=(long long)(n1*DIV);
std::cout << inum << std::endl;
if(inum==0) { std::cout << 1 << std::endl; }
else std::cout << DIV/gcd(inum,DIV) << std::endl;
}
return 0;
}
入力として入力すると:
1
0.0006
出力として取得します
5
2000
つまり(long long)0.0006*10000
、 は 6 ではなく 5 に等しいということです。これはなぜですか?