我有以下代码:
float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
但我得到“test:0”作为值。我想要“测试:0.000000000000001”。
我如何实现这一目标?
答案 0 :(得分: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;
科学记数法同时有两个目的:一个是你得到正确的值,两个是自动浮点值,所以除法是作为浮点除法进行的。