直接返回计算值与先存变量再返回的区别及精度问题咨询
两段C++代码的差异与精度问题解析
代码差异分析
两段代码的功能完全一致,都是计算复数的模长,唯一的语法区别仅在于:
- 第一段将
sqrt的计算结果先赋值给临时变量a,再返回该变量 - 第二段直接返回
sqrt的计算结果
关于精度问题的说法验证
所谓“第二段代码存在小数精度问题”的说法不成立,原因如下:
- 两段代码的运算逻辑完全相同:都会先计算
re * re + im * im,再调用sqrt函数得到结果,浮点运算过程没有任何区别 - 现代编译器(如GCC、Clang、MSVC)在默认或开启优化的情况下,会自动消除第一段中的临时变量
a,最终生成的汇编代码与第二段完全一致 - 即使关闭所有优化,临时变量
a只是存储sqrt返回的double类型值,同类型变量的赋值操作不会损失精度
简言之,两种写法在功能、性能、精度上没有任何差异。
内容的提问来源于stack exchange,提问作者Mario Davó
相关产品推荐
相关产品推荐

