2

私は2の負の累乗を計算するプログラムを書いていました。次の2つのコードスニペットを使用しました。

cout.precision(3);
cout << scientific << pow(2.0, p) << endl;

ans = pow(2.0, p);
printf("%.3e\n", ans);

の場合p = -8271、は正しい答え(1.517e-2490)を示しますが、 (6.929e-310)coutについては大きく異なる答えが得られます。printfなぜこの不一致が発生するのですか?

UbuntuでCodeblocksを使用しています。

4

1 に答える 1

3

だからだと思いますansが、期待するようにlong double言わなかったのです。必要なフォーマットコードは、その場合を想定しています。printflong double%.3Le

g ++コンパイラには、フォーマット/パラメータの不一致を検出するための警告もあります(私はそれが付属していると思います-Wall)が、このようにタイプセーフであるため、私は常にiostreamを好みます。

pもちろん、これはすべて、それもであると想定しているlong doubleため、コンパイラはのlong doubleバージョンを選択しpowます。

于 2012-05-09T02:51:37.840 に答える