处理double
数据类型时,乘以更好还是更差?
哪种方式更快?哪种方式使用更少的内存?哪种方式更受欢迎?
MSIL如何处理这个?
SquareInches = MMSquared / 645.16 SquareInches = MMSquared * 0.0015500031000062000124000248000496
注意: 10K用户会注意到这个问题的副本已被删除,因为原问题提问者决定在问题的"评论"部分指责每个人.
这个问题被重新发布,因为这是一个"好"的问题.
请"取消选中"社区Wiki以获取您的答案,因为我只是将其作为CW发布,因此它不被视为"声誉"抓取.
我应该使用乘法还是除法?
dsimcha.. 18
乘以逆是更快.编译器不会自动优化它,因为它可能导致精度损失很小.(这实际上出现在D新闻组Walter Bright经常出现,并且他明确表示编译器不会自动执行此操作.)您通常应该划分,因为它更具可读性和准确性.
如果您正在执行一条浮点代码十亿倍的循环和你不关心的精度小的损失和你将相同数量的被划分数次,然后由倒数乘以可以是一个很好的优化.实际上我在一些情况下获得了显着的真实世界加速,例如通过乘以逆所描述的那些,但这些是在循环中执行数十亿次的极端边缘情况,除了乘法浮点数之外几乎什么都不做.
乘以逆是更快.编译器不会自动优化它,因为它可能导致精度损失很小.(这实际上出现在D新闻组Walter Bright经常出现,并且他明确表示编译器不会自动执行此操作.)您通常应该划分,因为它更具可读性和准确性.
如果您正在执行一条浮点代码十亿倍的循环和你不关心的精度小的损失和你将相同数量的被划分数次,然后由倒数乘以可以是一个很好的优化.实际上我在一些情况下获得了显着的真实世界加速,例如通过乘以逆所描述的那些,但这些是在循环中执行数十亿次的极端边缘情况,除了乘法浮点数之外几乎什么都不做.
哪一个" 更快 "确实是一个特定于CPU的问题,或者至少是CPU特定的快多少,是的,除法通常被认为比乘法慢.当然,所有性能问题都可以通过"它取决于"来回答.
但是,如果你问哪个更" 好 "而不是哪个更快会得到一个明确的答案,那么可读性越高越好.你正在考虑的性能提升很可能是几个时钟周期的顺序,所以除非你在谈论这样做数百万次,否则你试图节省自己的微秒.并且没有微秒优化值得牺牲可读性和可维护性.
根据编译器和硬件的不同,优势将非常小或为零.
但它仍然很重要(在一个紧密的循环中),然后为了可读性你应该写
SquareInches = MMSquared * (1 / 645.16)
并且最好使用645.16的常数.
答案取决于执行环境的体系结构.通常,在大多数处理器上,划分通常比乘法成本稍高.
因此,除非这实际上是一个性能问题,否则我可能不会担心它.选择更易理解的转换因子.