C:从整数
我有可能会节省大量的调试时间,很多人的问题。减去双...C:从整数
给出一个函数:
void my_func(double value)
是否有以下的2有什么区别代码行?
double my_value = 1 - value;
和
double my_value = 1.0 - value;
即因为value
是double
,如果我使用1 - value
,我可以安心地认为结果是正确的实数,就像使用1.0 - value
时一样?
没有区别。要从int
中减去double
,必须将int
升级为double
。我个人更喜欢使用1.0
,因为我认为这更清楚它不是整数减法。但这完全是一个风格问题。
是的,你假设正确,但对于更复杂的表达式,你必须非常小心混合整数和浮点值。例如,无辜样子代码:因为计算是在int
值完成,并将结果转换为double
double x = 1/2;
将存储0
到x
。
非常感谢你 – vav
如果算术运算符的任一操作数是浮点数,则计算将以浮点算法完成。除非两个操作数都是浮点数,否则计算以双精度完成,在这种情况下,计算以浮点完成。
如果其中一个操作数长双倍,那么long double。 – gnasher729
我没有足够的投票声望,所以我只是感谢所有对我很好回答的人 – vav
@ gnasher729“long double”仅在非SSE指令用于扩展浮点精度时才有意义。如果无法控制是使用8087协处理器(80位精确)还是SSE指令(64位精度),则不知道结果的当前精度。如果使用SSE“长双”将与“双”相同。 – cwschmidt
在您的例子都将行为相同的方式
即考虑到这个值是双倍的,如果我使用1 - 值,我能感到安全,结果将是正确的实数,就像使用1.0值时一样?
使用1.0 - value
也不能保证它将是正确的实数。请检查一些文档Floating-Point Arithmetic。
非常感谢您的明确和详细的答案! – vav
我认为“更清楚”是_ **非常重要_,因为_someone_稍后会出现,并且看到“1 - 值”并且感到困惑。另外,如果'double my_value = 1 - value;'是'void my_func(double value)'函数声明下面的方法,那么您可能不得不回头去看看实际是什么类型的'value'来理解语句。我会_always_使用'1.0 - 值'。 –
@StephenP,我完全同意你的说法 – vav