首页 > 解决方案 > 在保持比率的同时减少一对整数的最佳方法

问题描述

我在一个不支持浮点的平台上运行,最大的整数类型是 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循环方面,同时当然要保持准确度。

任何想法如何处理?

标签: c

解决方案


推荐阅读