除法和取余的运算时间

上次排队那题,让我发现减少取余的次数可以减少很多时间。

然后查到一篇文章

高频率调用的函数一定要保证最优化,慎用除法和余数

原po显示404,所以只有别人转载的。

就是说:除法、取余的指令 CPU周期 可以达到加减法的80倍(周期越多越耗时),因此高频率使用的函数里,以及循环次数很大的循环里,可以通过减少除法次数和取余次数来优化。里面介绍了一些方法,比如用乘法、减法代替。

然后又看到另一篇文章

取模、乘法和除法运算在CPU和GPU上的效率

意思是好像取模运算并没有想象中的那么慢

对于CPU,最好采用取模运算,整数除法和单精度乘法的效率差不多。

对于GPU(是什么),采用浮点运算最快,其次是取模运算,整数除法最慢。

时间: 2024-12-13 12:44:51

除法和取余的运算时间的相关文章

汇编总结:无符号除法,有符号除法,取余,无符号乘法,有符号乘法

本文分为3个模块. 示例---该指令的示例 解释---为指令不好理解的地方 练习---为了更熟悉该指令 1.1 有符号除法指令及取余example: 在c语言里要完成 8 / 2的汇编指令如下: 在c语言里要完成 8 % 2的汇编指令如下: 4个字节的除法及取余运算示例如下: .section .text .global _start _start:     movl $8, %eax   #被除数是%edx:%eax 是这两个寄存器拼起来的%eax存放低位%edx存储高位     movl %

salesforce 零基础学习(四十三)运算取余

工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer dividend,Integer divider) { return dividend % divider == 0; } 提交代码发现竟然提交不上?? 后来查看API发现apex中没有直接的%取余运算,所以如果想要取余以及判断是否整除需要其他方式,代码如下: public without sharing

【分治】取余运算

问题 E: [分治]取余运算 时间限制: 1 Sec  内存限制: 128 MB提交: 16  解决: 6[提交][状态][讨论版] 题目描述 输入b,p,k的值,求bp mod k的值.其中b,p,k*k为长整型数. 输入 三个整数,分别为b,p,k的值 输出 bp mod k 样例输入 2 10 9 样例输出 2^10 mod 9=7 提示 解题思路:分治,顾名思义,把一个大问题分解为多个小问题. 这里有一个公式,利用这个公式通过递归求得. 代码: #include <iostream>

codevs 1497取余运算

1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamon 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描述 Output Description 输出b^p mod k=? =左右没有空格 样例输入 Sample Input 2  10  9 样例输出 Sample Output 2^10 mod

1497 取余运算

1497 取余运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描述 Output Description 输出b^p mod k=? =左右没有空格 样例输入 Sample Input 2  10  9 样例输出 Sample Outp

从C++和Python除法的区别谈谈求模(Modulus)和取余(Remainder)

今天发现一个很有意思的现象. 当做除法的时候,Python2和C++在负数的情况下会得到不同的整除结果: 当做-5 / 3的时候 C++的结果: -1 Python2的结果:-2 (请注意5 / -3的时候仍然会在C++中得到-1, Python2中得到-2) 可以看出C++在进行负数整除的时候执行的是直接舍去小数点后数字的操作,也就是返回和0比较接近的那个数字. 但在Python2中返回的则是小于等于商的最大整数,也就是返回和-∞更接近的数. 在做%操作的时候,依据的是这样的逻辑: a = b

leetcode——Divide Two Integers 不用乘除取余操作求除法(AC)

Divide two integers without using multiplication, division and mod operator. 题目只有简单的一句话,看起来可真简单啊,呵呵,假象.这个题目的难点在于对时间效率的限制和边界值的测试.第一印象肯定是循环一个个把因子从被除数中减去不久行了么,可是对于比如INT_MAX/1或者INT_MIN/1之类的执行时间长的可怕,会超出时间限制.改善时间效率的思路是参考网上别人代码,将因子不断乘以2(可以通过移位实现,同时结果也从1开始不断

Math——取模运算及取余运算

取模运算及取余运算 取余运算(Complementation)即我们小学时学的数学算术概念,而取模运算(Modulus Operation)常用于程序设计中 公式 a%b = a - (a/b * b) 取整运算 要明白取模运算和取余运算之间的区别,首先要了解取整运算(Round Operation) 取整运算常用的有三种,向负无穷取整,向正无穷取整,向零取整 以lua语言为例,lua的math数学库提供三个取整函数,floor向负无穷取整,ceil向正无穷取整,modf向零取整 (PS:lua

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆