は、小数点以下3桁までの浮動小数点数を印刷することを意図して、次のプログラムを、考えてみましょう大きな数字のためのstd ::固定を無視します:C++ Builderは
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
int main() {
double val = 1.234567890e50;
std::stringstream ss;
ss << std::fixed << std::setprecision(3);
ss << val;
std::cout << ss.str() << std::endl;
return 0;
}
この番号は正確に二重のように表すことはできませんが、今は無関係です。エンバカデロC++ Builderの10.1(コンパイラbcc32cバージョン3.3.1)で
GCC 5.1で、プログラム印刷
123456789000000004671007453916432257001527036608512.000
、出力は次のとおり
1.234567890000000047000000000000000000000e +50
C++ Builderの出力が、選択された浮動小数点表記(std::fixed
)と一致しないのはなぜですか?番号が10^300の場合でも、GCCは選択した表記法を使用してそれを示します。
なぜこれらの2つのコンパイラは異なる動作をしますか?この場合、文字列変換がどのように機能するかをC++標準で定義していますか?
Upvoted。この質問には、私が最初に感謝しなかった深みがあります。 – Bathsheba