2016-06-22 121 views
-1

我有以下代碼:打印出一個非常小的浮點數

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

但我得到「測試:0」的數值。我想要「測試:0.000000000000001」。

我該如何做到這一點?

+2

你可能想嘗試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++中,「^」是一個按位異或運算符。

第二個問題是表達式中的所有值都是整數值。這意味着(1/(10^15))的計算公式如下:

1)10^15 = 5,請記住^確實是一個按位異或運算符。

2)1/5 = 0,因爲這些是整數值,這是整數除法,這就是爲什麼你得到的0.

修復,這是使用科學記數法的最佳方式的值:

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

科學記數法同時爲兩個目的服務:一個是正確的值,另一個是兩個,這是自動浮點值,因此該分區是作爲浮點數執行的。

+0

我該如何做一個10的非基數?與7^15,7一樣是我的基礎,15是我的指數? – daemoner119

+4

使用[pow()庫函數](http://manpages.courier-mta.org/htmlman3/pow.3.html)。 –

+2

'1e-15'可能比'1/1e15'更好.... –