2011-12-20 11 views
3

浮動小数点のいくつかの大きな和の正当な値を完全に印刷したいのですが、浮動小数点数が十分大きい場合は、 "1.01383e + 007"のような表記法があります。正当な価値をどのように得ることができますか?「1.01383e + 007」の代わりに完全な浮動小数点数を印刷する方法は?

+3

あなたは現在どのようなコードを使ってそれらをプリントアウトしていますか? –

+0

cout << thefloat << endl; –

+1

手で行うことが不可能であることが証明されているときに、どのようにしてC++でこれを可能にすると思いますか? –

答えて

3

浮動小数点の重要な特性は、大きな値の場合、小数点までのすべての有効数字に関連する精度を持たないことです。 「科学的」ディスプレイは、固有の内部記憶の現実を合理的に反映する。

あなたが(例えば)10138300は、表示される10 かそこらに値のためのより有効数字を持っているデータ型、Cファミリー言語のようなdoubleを使用したい場合。または、CPUアーキテクチャーやプログラミング言語や環境によっては、拡張精度整数表現(longまたはlong longなど)を使用してください。

0

floatデータタイプは正確な値を格納しないため、正確な値を出力することはできません。 float

は、32ビットでは、3つの異なる部分間で分割される:符号ビット、指数部と仮数等:簡単に言えばS EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM

を、代わりに正確な「12345678」、floatデータ・タイプを記憶するであろう「1.23 * 10^7」しか格納しません(データタイプは「1.2345 * 10^7」を格納します)。他の数字は失われます。

大きな数値の正確な値に興味があるなら、C++で "Big Integer"ライブラリを調べることができます。

+0

指数が底2であり、底10ではないことを除いて、 '1.23 * 10 ** 7'も正確ではありません。 –

+0

それを指摘してくれてありがとう。私の元の意図は、指数と仮数の概念を理解しやすくすることでした。それは正確であることを意図したものではなかった。 – user1032613

0

などの10進数のライブラリを使用する必要があります。 gmp; "1.01383e + 007"形式は浮動小数点の格納方法によるものです。

5

あなたの質問を読んで、科学的な形式を出力したくないということを意味します。もしそうなら、次のようにストリームのフォーマットを制御することができます:

cout << setiosflags(ios::fixed) << thefloat << endl; 
関連する問題