2012-08-07 38 views
1

我不知道,也不能在C++中快速找到正確的方式輸入浮點常量。如何編寫浮點常量

如果我想要2^-52,我該寫什麼?而且,什麼< <與浮動? 這是正確的嗎?

const double pres = 1>>52 
+0

使用工會轉向一個浮動的「尾數」的部分是不確定的行爲。 – 2012-08-07 06:44:52

+0

在這裏回答(重複?) http://stackoverflow.com/questions/11806581/forms-of-constants-for-high-performance-addition-and-multiplication-for-double/11806593#11806593 – 2012-08-07 06:46:43

+0

不 - 這是不是愚蠢 - 對於像這樣的常量來說,存在比工會更好的解決方案並且有點擺弄。 – 2012-08-07 06:58:30

回答

5

看起來你真的想double表示的精度。在這種情況下,不要使用魔術常量。相反,你可以使用這個:

const double pres = std::numeric_limits<double>::epsilon(); 
+0

太好了,這正是我需要的。 – Enjolras 2012-08-07 06:53:10

3

可以使用hex float表示此:

const double pres = 0x1p-52; 
+0

由於某種原因,十六進制的浮點數在C中,但不在C++中。 – 2012-08-07 06:53:16

+0

哦 - 這很煩人 - 我從來沒有真正注意到 - 大概g ++和其他編譯器在C++中支持這個作爲擴展? – 2012-08-07 06:56:30

+0

是的,我相信g ++支持,但MSVC不支持。 – 2012-08-07 06:57:36

0
#include<math.h> 
double pres = 1/pow(2,52); 
+0

gcc是否會靜態計算這個值? – Enjolras 2012-08-07 06:57:59

+0

@Enjolras有可能,它確實如此。但這並不能保證。 – 2012-08-07 06:58:42