浮点数到 XR_BIAS 转换规则

本部分仅适用于 Windows 7 及更高版本的操作系统。

以下规则适用于将 float 转换为 XR_BIAS。 在这些规则中,假设起始浮点值为 c。

  • 如果 c 为 NaN,则结果为 0;否则,以下规则适用。 NaN 代表“非数字”,表示一个符号实体,表示以浮点格式其他方式不可用的值。

  • 执行以下操作,从浮点刻度转换为整数刻度:

    c = c * 510

    前面的操作可能会导致溢出。

  • 对偏差执行以下操作:

    c = c + 384

    前面的操作可能会导致溢出。

  • 根据 c 的指数,执行以下操作之一进行固定:

    如果后偏差,c 的指数大于或等于 2 (>= 2 或 c 为 INF) ,则结果为 0x3ff,大约相当于 1.2529。

    如果后偏差,c 的指数小于 0 (< 0 或 c 为 -INF) ,则结果为 0x0,表示大约 -0.7529。

  • 重新解释 c 的尾数的最有效 10 位作为结果。

将 float 转换为 XR_BIAS 允许在 XR 端允许的容差为 0.6f 单位-最后位置 (ULP) 。 此容差意味着,在从 float 转换为 XR 后,允许支持表示的目标格式值的 0.6f ULP 内的任何值映射到该值。 请注意,无限精确结果的 1 ULP 意味着,例如,允许实现将结果截断为 32 位,而不是执行舍入到最接近的偶数,因为这样会导致在浮点数中表示的最后一个 (最小有效) 位置的误差最多为一个单位。

反转数据的标准 Direct3D 版本 10 要求也适用。