【问题标题】:Metal float precision when adding values添加值时的金属浮点精度
【发布时间】:2021-03-07 16:38:41
【问题描述】:

在 Metal 中添加两个浮点数时,我没有得到正确的值。

我将图像存储为每个通道的 16 位浮点数。在 Metal 中,我从图像中读取值并尝试将它们相加。金属代码如下所示:

out.write(float4(a, b, a + b, 1.0), id);

这是我在金属调试器中得到的:

如果精度导致结果为 1.93,我会很好,但看起来 Metal 正在向较小的值倾斜。知道为什么会这样吗?

【问题讨论】:

  • 我不相信写入(按编码)正在发生。 half 实例可提供大约 10 倍于您所需的精度,以查看添加的结果。
  • 可能是您正在写入 BGRA 纹理,而不考虑调酒? 0.0094375 + 0.0094528 也不应该是 1.93,但这比任何一个值本身都更接近于 expect3d 结果。
  • 我不是在写 BGRA 纹理,但如果是这样的话,那就太棒了。

标签: swift metal


【解决方案1】:

小崽子。这个问题与加法不起作用或加法精确地做一些奇怪的事情无关。问题出在显示器上。 Metal 调试器在显示浮点数时不显示指数。最上面的数字其实是1.93125E-05,但是e-5部分没有显示出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多