让我们有 4 个 int
变量:a, b, c, d
并且需要计算(a * b)/(c * d)
有两种方法:
1) double 结果 = ((double)(a * b))/(c * d)
2) 双结果 = (a * b)/(c * d + 0d)
每种方式的利弊是什么?
最佳答案
如果你不介意我这么说,那你的做法确实很糟糕。
(a * b)
是仍在积分算术中计算的,因此会受到回绕的影响。 (这只会让我相信多余的括号是魔鬼的缩小版。)在 C 和 C++ 中,情况更糟,溢出行为是未定义,编译器保留吃掉你的猫的权利。
比这更糟糕的是,c * d
在两种 情况下也是用整数算术求值的!此表达式的结果 转换为double
。
我相信 1.0 * a * b/c/d
是最清晰的写法 a
, b
, c
和 d
在评估之前全部提升为 double
类型。我的方式从一开始就明确了您的意图。
关于java - 什么更好 : cast to double or adding double zero?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39639396/