c++ - 无符号模数 : alternative approach?

标签 c++ c optimization math

我需要优化这个非常小但令人讨厌的功能。

unsigned umod(int a, unsigned b)
{
    while(a < 0)
        a += b;

    return a % b;
}

在你喊出“你不需要优化它”之前,请记住,这个函数在整个程序生命周期中被调用了 50%,因为对于最小的测试用例基准,它被调用了 21495808 次。

该函数已被编译器内联,因此请不要添加 inline 关键字。

最佳答案

这样可以避免循环:

int tmp = a % b;
if (tmp < 0) tmp += b;

注意 a 和 b 都需要签名。

关于c++ - 无符号模数 : alternative approach?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323516/

相关文章:

c++ - constexpr(gcc) 错误 - 错误 : a brace-enclosed initializer is not allowed here before '{' token

c++ - CARLA RGB相机传感器的输出格式是什么

c - 合并两个文件,为什么在末尾添加一个新行? C编程

python - "in"的高效替代品

objective-c - 为什么实例化 UIAlertView 需要这么长时间?

c++ - Boost Asio 与一次性对象共享相同的 io_service

c++ - 离开范围时析构函数调用的顺序? (C++)

c - C 错误中的 Printf 链表

c - 如何将指针指向的大字符串放入缓冲区

python - 使用 Python 在内存中分配大数组