【发布时间】:2021-08-15 09:04:20
【问题描述】:
我总是假设将双精度数除以整数会导致代码更快,因为编译器会选择更好的微码进行计算:
double a;
double b = a/3.0;
double c = a/3; // will compute faster than b
对于单个操作而言,这无关紧要,但对于重复性操作,它会产生影响。我的假设总是正确的还是编译器或 CPU 依赖或其他什么?
同样的问题也适用于乘法;即3 * a 会比3.0 * a 快吗?
【问题讨论】:
-
如果第二个操作数是常数,则没有区别。
-
据我所知,算术/浮点单元内部没有混合类型。在机器级别,两个操作数都属于同一类型……如果需要,可以预先转换。
a和3.0具有相同的类型 (double)...a和3需要(通过编译器,而不是在运行时)进行(隐式)转换。 -
先阅读这个 :) 浮点在硬件中处理(除非你有一个小处理器)stackoverflow.com/questions/4584637/…
-
C 和 C++ 有区别吗?如果是这样,问题应该澄清是指哪种语言。如果不是,这应该在答案中解决。
-
@mkrieger1 我的意思是主要用于 C++。但我认为它对 C 也适用,因为编译器的数学运算是相同的。