【问题标题】:Fixed Point Representation of Double Type双精度型的不动点表示
【发布时间】:2013-07-08 21:34:57
【问题描述】:

我正在尝试将双精度类型转换为固定类型表示。根据选择的输入,我的原始值可以是例如 0.00996、989.15、1600.25、89.72 等。这里的要点是我所有的输入值总是正数,但小数点之前(和之后)的位数可能会有所不同。我正在尝试通过适当的缩放将这些双精度类型转换为定点表示。我尝试了 2.14 缩放(乘以 16,384),但不确定如何将其扩展到小数位前可变位数的情况。另外,我怎样才能最好地确保转换值的最大准确性/精度?任何帮助将不胜感激。谢谢。

我正在使用的代码:

fixedScale = (int) Math.Pow(2.0, 64.0);
int new_val = (int) (fixedScale * value);

【问题讨论】:

  • 您使用 int 而不是小数是否有原因? Decimal new_value = (Decimal)original_value
  • 你想要定点还是浮点?我很困惑。如果你想要固定点,那么只需决定你的比例并乘以。我不明白你为什么谈论可变位数。这对我来说听起来不是很固定。
  • 固定比例表示是 int
  • 我需要定点表示。
  • 那么,解释一下可变位数的来源?

标签: c# fixed-point


【解决方案1】:

如果您想要一个定点表示,那么您只需要确定比例即可。一旦你决定像这样从浮动转换为固定:

int fixedValue = (int)Math.Round(floatValue*Scale);

另外一个方向是这样的:

double floatValue = (double)fixedValue/Scale;

至于使用什么规模,这取决于您要达到的目标以及输入数据是什么。

【讨论】:

  • 谢谢。数字如上所示。我需要双精度类型。这是否意味着我的比例应该是 2^64?
  • 我不知道。我不知道你的限制和目标是什么。我不知道“我需要双精度类型”是什么意思。当您尝试将双精度值转换为适合 int 的值时,您显然会牺牲精度。还要记住,这些不是你的号码。只有1600.25 可以用二进制浮点数精确表示。其他数字不能精确地用双精度表示。
  • 我明白我会失去精确度。我想我想弄清楚准确性。如果我使用 2^14 比例,那么我的准确度将是 0.00006,而固定值将适合一个词。对吗?
  • 适合一个词吗?不知道你的意思。对于给定的比例,固定值与原始浮动值的差异永远不会超过 0.5/比例。
  • 如果你关心规模,那么在一定程度上的精度,为什么不在小数而不是双精度上使用这个策略呢?
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2011-10-24
  • 1970-01-01
  • 2018-02-23
相关资源
最近更新 更多