gpt4 book ai didi

floating-point - 如何将压缩整数 (16.16) 定点转换为 float ?

转载 作者:行者123 更新时间:2023-12-03 01:28:53 24 4
gpt4 key购买 nike

如何将“32位有符号定点数(16.16)”转换为 float ?

(fixed >> 16) + (fixed & 0xffff)/65536.0 可以吗? -2.5呢?还有-0.5?

或者固定/65536.0是正确的方式吗?

(PS:有符号定点“-0.5”在内存中看起来是什么样子?)

最佳答案

我假设二进制补码 32 位整数和运算符的工作方式与 C# 中相同。

如何进行转换?

fixed / 65536.0

正确且易于理解。

<小时/>
(fixed >> 16) + (fixed & 0xffff) / 65536.0

与上面的正整数等效,但速度较慢且难以阅读。您基本上使用分配律将单个部分分成两个部分,并使用位移位写入第一个部分。

对于负整数 fixed & 0xffff 不会提供小数位,因此对于负数来说它是不正确的。

查看原始整数-1,它应映射到-1/65536。此代码改为返回 65535/65536

<小时/>

根据您的编译器,执行速度可能会更快:

fixed * (1/65536.0)

但我认为大多数现代编译器已经进行了这种优化。

有符号定点“-0.5”在内存中是什么样子的?

反转转换给我们:

RoundToInt(float*65536)

设置float=-0.5给我们:-32768

关于floating-point - 如何将压缩整数 (16.16) 定点转换为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8638792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com