首页 > 解决方案 > 双除以双数和整数:哪个更好?

问题描述

我总是假设将双精度数除以整数会导致代码更快,因为编译器会选择更好的微码来计算:

double a;
double b = a/3.0;
double c = a/3; // will compute faster than b

对于单个操作,这无关紧要,但对于重复操作,它可以有所作为。我的假设总是正确的还是编译器或 CPU 依赖或其他?

同样的问题也适用于乘法;ie 会3 * a3.0 * a?

标签: c++c

解决方案


您的假设正确,因为您的两个除法操作都将使用两个double操作数执行。在第二种情况下,c = a/3整数文字将在double生成任何代码之前由编译器转换为值。

这个 C++ 标准草案

8.3 常用算术转换 [expr.arith.conv]

1    许多期望算术或枚举类型的操作数的二元运算符会导致转换并以类似的方式产生结果类型。目的是产生一个通用类型,这也是结果的类型。这种模式称为通常的算术转换,其定义如下:
...<br/> (1.3) – 否则,如果任一操作数为双精度,则另一个应转换为双精度。


请注意,在这个 C11 标准草案中第 6.3.1.8 节(通常的算术转换)具有等效的(实际上,几乎相同的)文本。


推荐阅读