打印出一个非常小的浮点数
Print out a really small floating-point number
我有以下代码:
float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
但我得到 "test: 0" 作为值。我要 "test: 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;
科学记数法同时有两个目的:一,你得到正确的值,二,这自动是一个浮点值,所以除法是作为浮点除法进行的。
我有以下代码:
float test = 1/(10^(15));
std::cout << "test: " << test << std::endl;
但我得到 "test: 0" 作为值。我要 "test: 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;
科学记数法同时有两个目的:一,你得到正确的值,二,这自动是一个浮点值,所以除法是作为浮点除法进行的。