C:从整数中减去双精度

C: Substract double from integer

我有一个问题可能会为很多人节省大量调试时间...

给定一个函数:

void my_func(double value)

下面两行代码有区别吗?

double my_value = 1 - value;

double my_value = 1.0 - value;

即鉴于 valuedouble,如果我使用 1 - value,我可以放心地认为结果将是正确的实数,就像使用 1.0 - value 时一样吗?

没有区别。要从 int 中减去 double,必须将 int 提升为 double。我个人更喜欢使用 1.0 因为我认为这更清楚地表明它不是整数减法。但这纯粹是风格问题。

是的,您的假设是正确的,但是对于更复杂的表达式,您必须非常小心地混合整数和浮点值。例如,看起来无辜的代码:

double x = 1 / 2;

会将 0 存储到 x,因为计算是在 int 值上完成的,结果将转换为 double

如果算术运算符的任一操作数是浮点数,则计算以浮点数算术完成。计算以双精度完成,除非两个操作数都是浮点数,在这种情况下,计算以浮点数完成。

你是对的。 - 运算符适用于相同类型的对象。这里有个隐式类型的对话,把int转成double。

请注意,这可能是混合使用有符号和无符号类型时的错误来源。

在您的示例中,两者的行为方式相同

即鉴于该值是双倍的,如果我使用 1 - 值,我可以放心结果将是正确的实数,就像使用 1.0 - 值时一样吗?

还有 1.0 - value,您无法确保它是正确的 number.Check Floating-Point Arithmetic 的一些文档。