【问题标题】:How to compute percentage using fixed point arithmetic?如何使用定点算术计算百分比?
【发布时间】:2013-10-23 20:39:16
【问题描述】:

我正在尝试使用定点算法计算丢弃数据包的百分比:

丢弃的数据包/(丢弃的数据包+传输的数据包)

一个数据包可以被传输也可以被丢弃。上面的公式将提供被丢弃的数据包的百分比。

问题是我在定点架构上执行此操作(不允许浮点)。我能想到的最好的是:

(100*丢弃的数据包)/(丢弃的数据包+传输的数据包)

这可行,但有几个问题。它只能让我的准确度达到正负 1%。您还必须担心溢出问题。

这一定是一个很常见的问题;我想知道是否有更好的方法来做到这一点?

【问题讨论】:

  • 你想要什么精度?

标签: c math fixed point percentage


【解决方案1】:

OP 方法给出的“准确度为正 0% 或负 1%”,而不是“正负 1%”。要获得 +/- 0.5%,请使用 (100*dp + (dp+tp)/2)/(dp + tp)。注意:整数除法会截断,而不是舍入。

为了变得更好,简单的*1000、*10000等

为避免溢出,请使用unsigned long longuint64_tuintmax_t

示例:(每千人)

unsigned long long DroppedPerThousand(unsigned dropped, unsigned transmitted) {
  unsigned long long sum = dropped;
  sum += transmitted;
  return (1000ULL*dropped + sum/2)/sum;
}

这可以重写为宏。

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2011-06-01
    • 2021-01-10
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多