c语言中int数相除,c – 整数除法还是浮点乘法?

这篇博客探讨了在C编程中,整数运算(如5*j/4)与浮点运算(如1.25*j)的效率问题。文章指出,尽管浮点数运算可能较慢,但编译器优化和特定硬件性能可能会改变这种状况。在某些情况下,如果值是固定的,计算转换因子并使用整数除法可能更快。然而,如果值每次都变化,浮点运算可能与整数运算速度相当。作者建议进行实际测试以确定哪种方法在特定上下文中更优,并强调了性能优化时要考虑周围代码的影响和处理器特性。
摘要由CSDN通过智能技术生成

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

int j = 78;

int i = 5* j / 4;

这比做的更快:

int i = 1.25*j; // ?

如果是,是否存在可用于决定使用哪个转换因子的转换因子,因为可以在同一时间内进行多次int除法一次浮点乘法?

编辑:我认为评论清楚表明浮点数学会慢一点,但问题是,多少?如果我需要将每个浮点乘法替换为$N $int divisions,那么$N $将不再值得吗?

解决方法:

你已经说过所有的价值都是动态的,这会产生不同.对于特定值5 * j / 4,整数运算将非常快,因为最糟糕的情况是编译器将它们优化为两个班次和一个加法,加上一些搞乱以应对j的可能性是否定的.如果CPU可以做得更好(单周期整数乘法或其他),那么编译器通常会知道它.当您编译一大类CPU(例如,生成最低公分母ARM代码)时,编译器优化此类事物的能力的限制基本上就会出现,编译器对此并不太了解硬件,因此不能总是做出好的选择.

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

如果所有值每次都变化,那么计算1.25的浮点除法,其次是浮点乘法,似乎不会比整数乘法后跟整数除法更快.但你永远不知道,测试它.

在现代处理器上为此提供简单的相对时序是不可能的,它实际上很大程度上取决于周围的代码.代码中的主要成本通常不是“实际”操作:它是“不可见”的东西,比如指令管道停止依赖,或者将寄存器溢出到堆栈或函数调用开销.是否可以内联执行此功能的功能可能比功能实际执行的功能更容易产生差异.就性能的确定性陈述而言,您基本上可以测试实际代码或关闭.但是,如果你的值以整数开头,那么对它们进行整数运算将比转换为double和执行类似数量的双运算更快.

标签:c,optimization

来源: https://codeday.me/bug/20190825/1719286.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值