本文是关于Direct3D:https://docs.microsoft.com/en-us/windows/win32/direct3d10/d3d10-graphics-programming-guide-resources-data-conversion中的转换的。
我不明白从高精度到低精度转换的部分:
在转换到另一种浮点格式时使用圆整到零。如果目标是整数或不动点格式,则使用圆点到最近--甚至,除非转换被显式地记录为使用另一种舍入行为,例如从整数到最近的浮点数到SNORM、浮动到or或浮动到SRGB。
零和是什么意思,例如,如果我想转换浮动->的一半?圆对最近-甚至意味着什么,例如,半->单人舞?
为什么一个圆到最近--即使另一个转换是圆到最近?
不同的措辞,这些转换是如何工作的?
发布于 2021-11-23 15:27:29
舍入是关于在低精度格式中不存在的高精度格式的数据所发生的一切。例如,0.7不能准确地表示为8位无符号的规范化整数,为0.7 * 255 = 178.5。哪个被储存: 178还是179?
其他精确性也是如此。16位浮点数无法存储32位浮点数.
因此,在进行四舍五入时,您(概念上)首先完全精确地转换数字,然后找出目标精度中的两个有效值中哪一个可用,然后使用算法从这两个值中选择一个。
整到最近-甚至意味着你在这两个值中最接近的值,但是如果你在它们中间,你选择两者中的偶数。所以,如果我们把178.5转换成一个非标准化整数,178.5是178-179之间的一半。但是178是一个偶数,所以我们选择这个,而不是传统的将一半舍入的方法。
零和意味着你总是选择最接近于零的数字,不管你离另一个数字有多近。
循环到零用于从浮点数到浮点数的转换,因为这就是如果您在转换后的值中删除尾数的额外位时会发生的情况。因为IEEE-754浮点数存储为震级+符号位,所以大小不包含符号值。因此,如果删除显著的低精度位,则结果数接近于零。
至于为什么在转换为规范化整数和非规范化整数时存在差异,这还不清楚。
https://computergraphics.stackexchange.com/questions/12360
复制相似问题