使用整数算术

时间:2018-06-13 12:12:47

标签: integer-division integer-arithmetic

我们经常需要在我们的时钟框架中找到分频器值,它们产生与目标速率最接近的时钟速率,即ABS(target_rate - input_rate / best_div)应该是最小的。我们仅限于整数运算,并使用以下公式:

int best_div, input_rate, target_rate;
best_div = (input_rate + target_rate / 2) / target_rate;

我们可以放心地假设input_rate >= target_rateinput_rate > 0target_rate > 0

然而,有一些数字,公式"失败",例如input_rate = 12152131, target_rate = 441992。对于这些数字,公式将返回best_div = 27,而28会导致费率接近441992

这导致两个问题:

  1. 在这种情况下,为什么公式不正确?
  2. 我有一个找到最佳分隔符的自动防故障公式?显然,人们可以计算两个分频器input_rate / target_rateinput_rate / target_rate + 1的结果频率,并选择更好的分频器,但更优选的是更简单的直接公式。

0 个答案:

没有答案