每时每刻,在代码中都会出现我需要将多个数字除以相同值的情况:
double d = divisor();
double a = firstNum() / d;
double b = secondNum() / d;
double c = thirdNum() / d;
因为乘法比除法快,所以我经常这样写</ p>
double di = 1 / divisor();
double a = firstNum() * di;
double b = secondNum() * di;
double c = thirdNum() * di;
我想知道这样做是否真的可以节省任何时间。我的编译器足够聪明,可以自动执行此操作吗?值得让我的代码可读性降低吗?
答案 0 :(得分:1)
不允许编译器将第一个片段转换为第二个片段,反之亦然,因为浮点算法很严格,并且这些片段不完全相等。
您是否自行保存任何内容取决于硬件和其他因素。只有在较大软件中的硬件上使用编译器进行测试才能证明。如果您想知道哪一个更快,那么差异可能并不明显。
如果您确定知道可读性强的代码要慢得多,以致无法满足性能要求,则可以考虑将其更改为可读性较差的更快的代码。