需要改变浮点精度

时间:2017-03-16 17:30:02

标签: android renderscript

我已经开始在android中阅读RenderScript了。我关注this特定的博客。

在阅读时,我遇到了名为设置浮点精度

的部分

这似乎是一个noob问题,但为什么我们需要改变浮点精度?我们得到了什么好处?特别是与RenderScript相关的任何内容?

2 个答案:

答案 0 :(得分:2)

这些精度适用于renderscript的计算部分。一般来说,它们不会影响渲染,在这种渲染中你会获得远低于IEEE 754的GL精度,但你不应该使用它,因为不推荐使用renderscript的图形部分。

基本上,您应该使用rs_fp_relaxed,因为这将使您进入最高范围的移动GPU和支持SIMD的CPU设备。

rs_fp_relaxed允许对于denorms进行齐射为零并且将舍入为零操作。当你对half,float和double类型进行数学运算时,这会影响答案。虽然如果你想通过移动gpus加速,你也应该避免加倍,即使在原生支持双打的设备上也不会加速。

我建议查看花车上的维基页面:https://en.wikipedia.org/wiki/Single-precision_floating-point_format

要点是浮点数存储在两个部分中,指数和有效数字类似于1.23 * 10 ^ 13的科学记数法。当指数全为0时,那么你的数字是非正规的。因此,如果计算结果为指数为0的值,则有效数也将最终为零而​​不是实际值。对于float32,具体值为1.1754942E-38(0x7ffff)到1.4E-45(0x1)以及相应的负值。

当您使用两个浮点数进行数学计算时,实现将无法计算精确度的额外数字,以便知道绕过最后一位的方法,以便您可以从舍入到最后一个点超过1 ulp。甚至实施。通常1 ulp非常小,但绝对差异取决于您的值在实数空间中的位置。例如,1.0编码为0x3f800000。 1 ulp错误可能会给你0x3f800001,转换为1.0000001。

答案 1 :(得分:0)

精确度基本上就是这样。它告诉我们如何精确绘制屏幕上的内容。在某些情况下,浮点精度本身或与内存或性能等其他内容相比可能无关紧要。如果您的设备屏幕较小且内存较低,则无需双精度绘制模型。