【问题标题】:ARM - convert string to float in hardware?ARM - 将字符串转换为硬件中的浮点数?
【发布时间】:2016-04-16 18:18:36
【问题描述】:

我正在尝试新的树莓派。 许多人建议使用 glibc strtod 和 family 作为这个问题的答案。

但是我把自己放在了一个没有任何库的组装项目中。

我阅读了fcvtarm 指令,但它只将整数转换为浮点数。

字符串可以是“14.58”,我应该得到 ieee-754 等效的 0 10000010 11010010100011110101110(空格只是为了方便起见)。

问题:

fcvt 有什么办法可以帮助我将该字符串转换为 ieee754 浮点数吗?还是硬件方面的其他东西? (并且比软件长除法更快)

编辑:

也许我可以将字符串解析为可选的“.”,将该部分从整数转换为硬件中的浮点数;对点之后的其余字符串做同样的事情,根据数字的数量将它除以十的幂,然后将两个部分相加..哇..

也许它可能已经足够快了。

【问题讨论】:

  • 我想知道你是如何将字符串传递给机器的,用键盘和组装听起来是不可能的。还有为什么要组装?
  • 我从网络得到这个字符串。组装只是为了发展我的手臂组装技能。它对我有用。

标签: string floating-point arm raspberry-pi type-conversion


【解决方案1】:

FVCT指令只能转换:

  • 整数转浮点
  • 定点(即整数除以 2 的幂)转浮点

所以没有一个可以将字符串转换为浮点数。

我基本同意您的编辑(有一些修改)。你应该:

  • 查找点的位置(点后多少位数)并将其从字符串中删除(即左移所有剩余字符)
  • 将字符串(不带点)转换为整数
  • 将整数转换为浮点数 (VCVT)
  • 将结果除以(浮点数)10^(点后的位数)。这是硬件支持的。您绝对需要在浮动中执行此操作,否则您将失去太多精度。

或者,你也可以调用像sscanf这样的函数...

【讨论】:

  • 我意识到我们在流程上达成了一致。我可能没有那样表达,但就是这样。这是在没有所有软件实现的情况下实现它的唯一方法。谢谢 Dric512。
猜你喜欢
  • 2011-11-25
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
相关资源
最近更新 更多