c - 在保持比率的同时减少一对整数的最佳方法
问题描述
我在一个不支持浮点的平台上运行,最大的整数类型是 32 位。
给定一对值,在继续处理它们之前,我需要确保它们都不超过 16 位。
如果其中任何一个有,那么我需要减少两者,同时尽可能准确地保持它们的比率。
这是我到目前为止所做的:
#define MAX_VAL 0x0000FFFF
typedef unsigned int uint32;
void func(uint32 x, uint32 y) {
if (x > MAX_VAL && y <= MAX_VAL) {
y = y * MAX_VAL / x;
x = MAX_VAL;
}
if (x <= MAX_VAL && y > MAX_VAL) {
x = x * MAX_VAL / y;
y = MAX_VAL;
}
while (x > MAX_VAL || y > MAX_VAL) {
x >>= 1;
y >>= 1;
}
...
}
就准确性而言,这似乎运作良好。
但是,我仍然想提高性能,特别是在while
循环方面,同时当然要保持准确度。
任何想法如何处理?
解决方案
推荐阅读
- typescript - 推断类型函数参数
- vuejs2 - Vue Jest 将数据传递给组件
- python - 使用两个数据框列作为参考映射值
- excel - 如何将双精度数据类型打印为完整数字,而不是截断数字
- c++ - 如何使用 std::ifstream 从文件中读取字节到 std::array?
- javascript - 如果代码继续休息,如何使条件语句继续?
- python - 在 python 中使用嵌套循环时提高性能的任何提示
- javascript - 在 next.js 中没有调用 getServerSideProps
- pymongo - 我如何解释 find() 而不在 pymongo 中实际运行查询?
- python - 我如何停止 else 循环并让它重新开始?