c - 优化乘法和加法
问题描述
我正在使用 C 并且我有两个非负整数 n 和 m(都 >= 0,n < 500)。我需要形成产品
n*(n+1)/2 + m
这将需要数亿次,所以我想尽可能地优化它。我目前的实现是:
inline int func(const int n, const int m) { return ( (n*(n+1) >> 1) + m); }
使用inline
和>> 1
来除以 2。有没有其他方法可以加快计算速度?
解决方案
鉴于这n
将少于 500,您可以预先计算 的所有可能值n*(n+1)/2
并将它们放在一个表中,然后使用该表执行计算:
int n_sum[500];
// call this once at program start
void init_sum()
{
int i;
for (i=0;i<500;i++) {
n_sum[i] = i*(i+1)/2;
}
}
inline int func(const int n, const int m)
{
return n_sum[n] + m;
}
推荐阅读
- selenium - Winium 驱动程序在尝试退出时抛出错误
- php - 如何在 XenForo 2 中显示不同语言的不同导航?
- java - Springs @AliasFor 可以用于@Import
- amazon - 我们可以在卖家中心取消/退款使用“Amazon Pay”的订单吗?
- python - 如何使用 python 为 Azure SQL 创建地理复制
- php - 包含子字符串的字符串的正则表达式
- sql - 如何在表格中间打印所需行?
- multithreading - UDP,多线程多个客户端?
- attributes - Aframe(如何?)动画实体或同时和顺序缩放/旋转/位置的实体
- qt - 在 Qml 中设置自定义控件的内容区域