2016-08-16 5 views
2
int n; 
n = 2; 
int d; 
d = pow(10,n); 
cout<<d<<endl; 

を期待通りに動作しないことではなく、100 の99を表示する私は恐らく丸め問題をのmath.h電力機能

+0

'pow 'の代わりに' powl'を試してください –

+2

プログラム全体を投稿できますか?これは私のために100を返します。 – DarmaniLink

+0

これは 'using namespace std;'とmingwの組み合わせです。私はこれがなぜ起こるのかを決めることはできませんでしたが、 'std :: pow'で面白いことがあります。ここにこのファイルを置いてください:http://stackoverflow.com/questions/33187956/c-pow-unusual-type-conversion/33190014#33190014 – user4581301

答えて

7

をindcludedています。

std::powの実装には、整数引数の特殊なケースがあります。他の人は基本的な数学に頼っているだけです。たとえば、pow(x,y) == pow(2, y*log2(x))です。実装でこのルールを使用する典型的な理由は、2の内部で浮動小数点数を表しているからです。しかし、log2(x)は丸めの問題を抱えている可能性があります。

あなたの場合、log2(10)3.3219280948873623478703194294894となります。つまり、pow(10.0, 2.0)は、背後でpow2(6.6438561897747246957406388589788) = 64 * pow2(0.6438561897747246957406388589788)と計算できます。後の言葉は、正しい1.5625のすぐ下の値に切り捨てられている可能性があります。

関連する問題