【问题标题】:How does the decimal value '41000' convert to a floating point value of '0.0201'?十进制值“41000”如何转换为浮点值“0.0201”?
【发布时间】:2020-10-30 18:44:30
【问题描述】:

我目前正在尝试更改 32 位浮点值,但是它的实现方式仅接受 UI32 整数值,并且会以某种方式将其转换(无法更改此转换)为浮点值并显示它。例如,我可以传入41000,它会输出/显示0.0201,尽管它最多存储9 个小数位(比那个多3 个)。最大值和最小值在 .csv 文件中定义,最大值为131070(显示为0.0627),最小值为0。默认值为32767,显示为0.0157

我已经使用在线转换器测试了十进制/整数浮动,但它似乎不起作用(值保持不变)。在达到浮点值之前,它看起来可能不止一次转换。

我的问题是这里发生了什么样的转换,还有什么我没有考虑到的吗?

感谢任何建议!

编辑:在 .csv 文件(包含这些值)中,我还发现了一个比例数字列,这些值的比例为 4.79*10^-7,可用于进行转换,而不是整数到浮点数的转换

【问题讨论】:

  • 可能是十六进制
  • 什么意思?就像从十进制转换为十六进制然后再转换为浮点?编辑:对此进行了测试并得到了5.74532e-4141000,这是很遥远的事情。也许我自己读错了?
  • 你有那个转换函数的源代码或文档吗?还是您尝试对其进行逆向工程?
  • 这里没有足够的信息来回答。三个给定的样本(省略越界 1015066128)是非线性的(通过四舍五入可以解释),因此转换器不仅仅是乘以比例(对于定点格式)。样本不符合正常的浮点格式(例如,32767 将转换为接近两倍的幂,例如 1、1½、1¾ 等,无论指数和有效数字字段在格式中的位置,但它没有——它略高于 1/64)。我们需要更多示例、例程名称、文档等。
  • 嗨,埃里克。我用这些值找到的比例更新了我的问题。遗憾的是,这些是我拥有的此类实现的唯一示例,遗憾的是,没有关于此或我正在使用的任何代码的文档(这是 3-4 年前开发的代码的一部分,所有开发人员都离开了) .

标签: floating-point binary hex converters


【解决方案1】:

通过仅使用比例因子将任何整数点值乘以“浮点”来解决它。非常狡猾的实现,但现在我知道为什么它不是转换了。

【讨论】:

  • 请注意,比例因子几乎 2^(-21) = 4.76837e-7,暗示数据以定点格式存储。看起来很狡猾的是,比例因子在 4.79e-7 处略有不同,正如 Eric Postpischil 指出的那样,问题中提供的数据偏离了该比例因子建议的线性关系。
  • 好皮卡,我确实注意到了这一点,因为它确实导致了一些不准确,但输出数字被截掉了很多十进制数字(只有 6 个小数位)。因此,这并没有影响我的结果。
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 2015-07-31
  • 2013-04-17
  • 2017-02-23
  • 1970-01-01
  • 2014-03-01
  • 2020-07-01
相关资源
最近更新 更多