Ste*_*Bay -2 c++ integer-division
我必须计算一些简单的数学表达式,但是当我在一行中执行时,结果总是为零.但正确的结果显然不是零.它很有趣但是当我分开表达的部分时,我得到了正确的答案.后来我将除以这个结果,所以它不应该是0.
表达式如下:
(X-X1)/(X2-X1)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,delta:0
double delta = (x - x1) / (x2 - x1);
Run Code Online (Sandbox Code Playgroud)
但这样三角洲将是正确的:
double top = x - x1;
double bottom = x2 - x1;
double delta = top/bottom;
Run Code Online (Sandbox Code Playgroud)
你知道吗,怎么会发生这种情况?
Mat*_*son 11
这是"用于产生浮点值的整数除法"的典型情况.如果x,x1并且x2都是整数,那么编译器应该根据C和C++的规则使用整数计算来计算x-x1和x2-x1,然后将它们的差异除以整数除法.如果x2-x1大于x-x1,则结果为零[假设正值如7/14.-14/-7显然是2].
简单的解决方法是将一个表达式的类型转换为浮点类型:
double delta = static_cast<double>(x - x1) / (x2 - x1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1957 次 |
| 最近记录: |