1
17
乘反比更快。编译器不会自动优化这一点,因为这会导致精度的微小损失。(这实际上出现在D新闻组Walter Bright Frequents上,他明确表示编译器不会自动执行此操作。)通常应该进行拆分,因为这样更可读、更准确。 如果在循环中执行一段浮点代码十亿次 和 你不在乎精度的微小损失 和 你将被同一个数除几次,然后乘以逆数可以是一个很好的优化。实际上,在一些情况下,我已经得到了显著的现实世界加速,比如用倒数相乘所描述的情况,但是这些是执行了几十亿次循环的极端边缘情况,除了乘浮点数几乎什么都不做。 |
2
11
哪一个是“ 更快 “确实是一个特定于CPU的问题,或者至少CPU的特定速度快多少,是的,除法通常被认为比乘法慢。当然,所有的性能问题都可以用“它取决于”。 但是,如果你问的是 更好的 “答案越清晰,可读性越好,而不是哪个更快。您所看到的性能改进可能是几个时钟周期的顺序,所以除非您要说做数百万次,否则您将试图节省您自己的微秒。和 没有值得牺牲可读性和可维护性的微秒优化 . |
3
11
根据编译器和硬件的不同,其好处非常小或为零。 但它仍然很重要(在一个紧密的循环中),然后为了可读性,您应该编写
最好使用常数645.16。 |
4
5
答案将取决于执行环境的体系结构。一般来说,在大多数处理器上,除法通常比乘法稍微贵一些。 所以 除非这实际上是一个性能问题,否则我可能不会担心它。 选择更容易理解的换算系数。 |
6
3
划分算法是 更慢的 在大多数情况下都比乘法算法好。 这是一种权衡,你可以选择更可读的方式,也可以选择更快的方式。
这易于读取和维护,但执行速度慢于其乘法对应项:
如果您这样做,您将需要在内存中有更多的空间来存储倒数位数,但是算法的运行速度明显更快。一位用户在VS2005项目中对其进行了测试,并报告乘法版本的性能提高了8倍。 原因是乘法可以在处理器上盲目地转换为移位和加法操作,这是CPU上最优化的操作。一个好的有符号乘法算法是布斯的算法(处理器为您做这个)。另一方面,在执行分割算法时,需要更多的控制开销,从而使分割算法的速度变慢。 如果您需要性能,请使用加法、减法(只不过是添加两个补数)、乘法、移位,但不要使用除法。你会得到一个 大量的 如果你提前计算出所有的逆数,并用它们在除法密集型程序中进行乘法运算,这是不可忽略的改进。 |
8
0
如果你用一个像
|
10
0
在大多数处理器中,乘法比除法快。但对于大多数应用程序来说,这确实是微不足道的,在我看来,您最好选择可读性更好的应用程序,除非分析显示这是一条关键路径。 如果它是一种解释性语言,那么读取源代码并将其转换为数字所需的时间将压倒实际进行数学运算所需的时间,特别是当您使用这么多有效数字进行乘法运算时。(你确定你真的需要这么多有效数字吗?) |
11
0
我认为第一种方法显然是首选的,因为它是明确的。想象一下在别人的代码中找到这个。你怎么确定0.00155…真的是1/645.16吗?如果最初的程序员犯了错误怎么办?此外,我如何知道645.16是正确的换算系数?为了简单起见,最好不要将数字压缩或统一表示。最基本的例子如下:
我们可以清楚地看到这个数字是正确的,但是你怎么知道8760是正确的答案呢?如果需要执行其中许多操作,则可能需要在输入密集计算之前将数据预处理到正确的表单。这样,你就不需要难以置信的效率,问题就变得没有意义了。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |