C:从整数中减去双精度
C: Substract double from integer
我有一个问题可能会为很多人节省大量调试时间...
给定一个函数:
void my_func(double value)
下面两行代码有区别吗?
double my_value = 1 - value;
和
double my_value = 1.0 - value;
即鉴于 value
是 double
,如果我使用 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 的一些文档。
我有一个问题可能会为很多人节省大量调试时间...
给定一个函数:
void my_func(double value)
下面两行代码有区别吗?
double my_value = 1 - value;
和
double my_value = 1.0 - value;
即鉴于 value
是 double
,如果我使用 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 的一些文档。