在做我的作业时,我注意到一些非常奇怪的东西,我无法弄清楚为什么.
int x = 5;
cout << pow(x, 2);
Run Code Online (Sandbox Code Playgroud)
结果是25.那没关系.但如果我写这样的程序:
int x = 5;
int y = pow(x, 2);
cout << y;
Run Code Online (Sandbox Code Playgroud)
结果是24!
当x为2,3,4,6,7,8没有问题,但是5,10,11,13等结果比它应该低1.
if()也是一样的.
for (int x = 1; x <= 20 ; x++) {
if (x * x == pow(x, 2))
cout << x << endl;
}
Run Code Online (Sandbox Code Playgroud)
它打印出数字1,2,3,4,6,8,12,16.
jue*_*n d 10
std::pow()返回浮点数.例如24.99999999,如果结果是你并将其投射到int,那么它将被切断为 24.
这就是你在第二个代码示例中所做的.在第一个代码示例
cout中没有转换int并输出正确的结果.
'pow'返回一个double值,而不是int.当转换为int时,double值会被截断.
http://www.cplusplus.com/reference/cmath/pow/
不建议将double与int进行比较.
http://www.cplusplus.com/reference/cmath/pow/
对您的代码进行次要编辑:
int x = 5;
double y = pow(x,2); // correct datatype
cout << y;
Run Code Online (Sandbox Code Playgroud)
该战俘功能可与float和double,而不是整数.将此值分配给整数时,该值可能会被截断,因为浮点数据的表示中存在精度问题.
我建议阅读科学家应该知道的关于浮点算术的内容,因为这描述了为什么你会看到这种行为.
话虽如此,如果您使用double值而不是int,您可能会看到您期望的结果.
| 归档时间: |
|
| 查看次数: |
4652 次 |
| 最近记录: |