转载

在Java中将浮点转换为32位定点

定点数是使用整数部分的类型的特定数量的位的实数的表示,以及小数部分的类型的剩余位.表示每个部分的位数是固定的(因此名称,定点).整数类型通常用于存储定点值.

定点数通常用于没有浮点支持的系统,或者需要比浮点数更快的速度.可以使用CPU的整数指令执行定点计算.

32位定点数将存储在32位类型中,例如int.

通常,(在这种情况下为无符号)整数类型中的每个位将表示整数值2 ^ n,如下所示:

1    0    1    1    0    0    1    0       = 2^7 + 2^5 + 2^4 + 2^1 = 178
2^7  2^6  2^5  2^4  2^3  2^2  2^1  2^0

但是,如果该类型用于存储定点值,则这些位的解释略有不同:

1    0    1    1    0    0    1    0       = 2^3 + 2^1 + 2^0 + 2^-3 = 11.125
2^3  2^2  2^1  2^0  2^-1 2^-2 2^-3 2^-4

上例中的定点数称为4.4定点数,因为整数部分有4位,数字的小数部分有4位.在32位类型中,定点值通常为16.16格式,但也可以是24.8,28.4或任何其他组合.

从浮点值转换为定点值涉及以下步骤:

>将浮点数乘以2 ^(类型的小数位数),例如. 24 ^ 8 ^ 8

>如果需要,将结果舍入(仅加0.5),并将其置于底层(或转换为整数类型),留下整数值.

>将此值分配给定点类型.

显然,你可以在数字的小数部分失去一些精确度.如果小数部分的精度很重要,定点格式的选择可以反映这一点 – 例如.使用16.16或8.24而不是24.8.

如果需要对定点数进行签名,也可以以相同的方式处理负值.

如果我的Java更强大,我会尝试一些代码,但我通常用C语言写这些东西,所以我不会尝试Java版本.此外,堆叠器的版本对我来说看起来不错,但有一个小例外,它不提供舍入的可能性.他甚至会告诉你如何进行乘法运算(转变非常重要!)

原文  https://codeday.me/bug/20190110/514258.html
正文到此结束
Loading...