我有以下代码:打印出一个非常小的浮点数
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++ –