我有以下代碼:打印出一個非常小的浮點數
float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
但我得到「測試:0」的數值。我想要「測試:0.000000000000001」。
我該如何做到這一點?
我有以下代碼:打印出一個非常小的浮點數
float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
但我得到「測試:0」的數值。我想要「測試:0.000000000000001」。
我該如何做到這一點?
這裏有很多問題。
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;
科學記數法同時爲兩個目的服務:一個是正確的值,另一個是兩個,這是自動浮點值,因此該分區是作爲浮點數執行的。
我該如何做一個10的非基數?與7^15,7一樣是我的基礎,15是我的指數? – daemoner119
使用[pow()庫函數](http://manpages.courier-mta.org/htmlman3/pow.3.html)。 –
'1e-15'可能比'1/1e15'更好.... –
你可能想嘗試double而不是浮動http://stackoverflow.com/questions/28045787/how-many-decimal-places-does-the-primitive-float-and-double-support – SnoozeTime
'1 /( 10 ^(15))' - 這個'^'不符合你的想法。 – PaulMcKenzie
@PaulMcKenzie可能是因爲該網站建議將「c」作爲標籤,即使您已經編寫並標記了C++ –