2016-06-22 120 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'更好.... –