【问题标题】:Computing float to 2 digits only (not formatting/rounding off 6 digits after decimal to 2)仅将浮点数计算为 2 位(不将小数点后的 6 位格式化/四舍五入为 2)
【发布时间】:2013-07-31 05:13:37
【问题描述】:

我正在嵌入式处理器上运行计算,其中涉及如下浮点操作:

a = (float)23 / (float)3;  // a = 7.666....7

这是一个很长的计算,我的应用程序还可以,但存在一定的舍入误差;我的意思是 7.67 或 7.66 无关紧要。有没有办法减少计算浮点数所花费的计算时间,或者告诉math.h 到 2 位数?

知道怎么做吗?

PS: 现在我知道很多人会建议使用定点,但我有特定的要求。

【问题讨论】:

  • 您希望单除法计算运行得更快?
  • 那里发生了所有事情。不只是除法,我还有乘法和加法。
  • 不,你的代码只有一个部门,从你发布的内容来看
  • 我只是举了一个我正在寻找的计算时间舍入的例子。很抱歉造成混乱。
  • 请提供这些具体要求,否则我们可能会在这里结束XY Problem ;-)

标签: c decimal rounding ieee-754 decimal-point


【解决方案1】:

精度由数据类型决定,float 和 double 等常见类型具有无法更改的固定精度,但有像 libfixmath 这样的库可以让您执行快速的非整数数学运算(在这种情况下使用 @ 987654322@)

【讨论】:

    【解决方案2】:

    没有什么可以“告诉”math.h(在这方面); float 没有精度选项。

    如果您想要较少的计算密集型计算,则必须使用其他类型或方法。

    您已经提到了最佳候选:定点。但是,由于不明原因,你说你不能使用它。

    其他想法是将您的计算扩大例如 10,000 倍,并将所有内容保持为 int(或 longer)。然后,仅在需要时缩小到float。不过当然,这取决于你的问题,如果你能做到这一点。

    【讨论】:

    • 感谢您的回答。
    • 好吧,我想听更多人告诉我他们的经历 :-)
    • @boffin 谢谢!告诉你为什么不能使用定点可能会有所帮助;-)
    • 需要分享的信息比我被允许的要多得多……规则!!对不起:-(
    • @boffin 啊,已知问题 ;-)
    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2020-06-12
    相关资源
    最近更新 更多