gpt4 book ai didi

c++ - 整数除法,还是 float 乘法?

转载 作者:太空狗 更新时间:2023-10-29 20:26:39 28 4
gpt4 key购买 nike

如果必须计算给定 int 值的分数,请说:

int j = 78;
int i = 5* j / 4;

这比做更快吗:

int i = 1.25*j; // ?

如果是,是否有一个转换因子可以用来决定使用哪个,比如在一个 float 中可以同时完成多少个 int 划分> 乘法?

编辑:我认为评论清楚地表明 float 学会更慢,但问题是,慢了多少?如果我需要将每个 float 乘法替换为 N int 个除法,对于什么 N 这不值得不再?

最佳答案

您说过所有的值都是动态的,这很重要。对于特定值 5 * j/4,整数运算将快得令人眼花缭乱,因为几乎最坏的情况是编译器将它们优化为两次移位和一次加法,再加上一些乱七八糟的东西以应对 j 为负的可能性。如果 CPU 可以做得更好(单周期整数乘法或其他),那么编译器通常会知道它。当您为广泛的 CPU 系列进行编译时(例如,生成最低公分母的 ARM 代码),编译器优化此类事情的能力的局限性基本上就出现了,而编译器并不真正了解硬件,因此不能总是做出好的选择。

我想如果 ab 固定了一段时间(但在编译时不知道),那么计算 k = double( a)/b 一次,然后 int(k * x) x 的许多不同值,可能比计算更快a * x/b 用于 x 的许多不同值。我不会指望它。

如果所有值每次都不同,那么计算 1.25 的浮点除法,然后是浮点乘法,似乎不太可能比整数乘法更快其次是整数除法。但你永远不知道,测试一下。

在现代处理器上不可能为此提供简单的相对时序,它实际上在很大程度上取决于周围的代码。代码中的主要成本通常不是“实际”操作:它是“不可见”的东西,例如指令流水线在依赖项上停滞,或将寄存器溢出到堆栈,或函数调用开销。执行此工作的函数是否可以内联可能很容易产生比函数实际执行方式更大的差异。就明确的性能陈述而言,您基本上可以测试真实代码或闭嘴。但很有可能,如果您的值以整数开始,那么对它们执行整数操作将比转换为 double 并执行类似数量的 double 操作更快。

关于c++ - 整数除法,还是 float 乘法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061355/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com