2016-06-22 6 views
-1

は:値として:を印刷し、私は次のコードを持っている本当に小さな浮動小数点数

float test = 1/(10^(15)); 
std::cout << "test: " << test << std::endl; 

しかし、私は「0テスト」を取得します。 "test:0.000000000000001"が欲しい。

どうすればよいですか?

+2

floatの代わりにdoubleを試してみるとよいでしょう。http://stackoverflow.com/questions/28045787/how-many-decimal-places-does-the-primitive-float-and-double-support – SnoozeTime

+6

'1 /( 10 ^(15)) ' - それはあなたが思っていることを'^'はしません。 – PaulMcKenzie

+0

@ PaulMcKenzieおそらくサイトがC++を書いてタグ付けしたときでもタグとして "c"を提案しているからです。 –

答えて

8

ここには複数の問題があります。

10^15 

「^」が指数演算子になると予想されます。つまり、10は15乗に上げられます。

これはありません。 CおよびC++では、「^」はビット単位の排他的論理和演算子です。

第2の問題は、式のすべての値が整数値であることです。これは、(1/(10^15))が次のように計算されることを意味します。

1)10^15 = 5、^は実際にはビット単位の排他的論理和演算子です。

2)1月5日= 0、これらは整数値であるため、これはあなたが0

の値を取得し、なぜこの問題を解決する最良の方法は、科学的表記法を使用しているされた整数除算、次のとおりです。

float test = 1/(1e15); 
std::cout << "test: " << test << std::endl; 

科学的表記は同時に2つの目的を果たします.1つは正しい値を、2つは自動的に浮動小数点値なので、除算は浮動小数点除算として実行されます。

+0

私は10の非ベースをどうやってしますか? 7^15、7は私の基底、15は私の指数と同じですか? – daemoner119

+4

[pow()ライブラリ関数](http://manpages.courier-mta.org/htmlman3/pow.3.html)を使用してください。 –

+2

'1e-15'は' 1/1e15'よりも良いかもしれません.... –

関連する問題