2
int n;
n = 2;
int d;
d = pow(10,n);
cout<<d<<endl;
を期待通りに動作しないことではなく、100 の99を表示する私は恐らく丸め問題をのmath.h電力機能
int n;
n = 2;
int d;
d = pow(10,n);
cout<<d<<endl;
を期待通りに動作しないことではなく、100 の99を表示する私は恐らく丸め問題をのmath.h電力機能
を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
のすぐ下の値に切り捨てられている可能性があります。
'pow 'の代わりに' powl'を試してください –
プログラム全体を投稿できますか?これは私のために100を返します。 – DarmaniLink
これは 'using namespace std;'とmingwの組み合わせです。私はこれがなぜ起こるのかを決めることはできませんでしたが、 'std :: pow'で面白いことがあります。ここにこのファイルを置いてください:http://stackoverflow.com/questions/33187956/c-pow-unusual-type-conversion/33190014#33190014 – user4581301