繁体   English   中英

你如何在java中获得浮点数的尾数?

[英]How do you get the mantissa of a float in java?

我正在尝试获取浮点数的尾数(只是为了学习),但它没有按预期工作。

浮点数的结构

说5.3的尾数是53,对吗? 我试过这段代码:

System.out.println(Float.floatToIntBits(5.3f) & 0x7FFFFF);

它打印2726298 它不应该删除指数位并留下53? 我尝试了很多东西,但总会发生这种情况。 我在这做错了什么?

符合IEEE标准的单精度公式为:

(-1)^sign + 1.Mantissa x 2^(Exponent - Bias)

所以5.3 base 10是101.0100110011001100110011 base 2

101.0100110011001100110011 = 1.010100110011001100110011 * 2 ^ 2

具有偏差= 127的2 ^ 2 = 2 ^(exp - 偏差)(根据IEEE单精度标准)
so:exp - 127 = 2 => exp = 129 base 10或10000001 base 2

单精度表:

0 | 10000001 | 01010011001100110011001

符号= 0
Exp = 129
尾数= 2726297

来自IBM的文章:Java的新数学。 浮点数俄语 )获取尾数的最简单方法是:

public static double getMantissa(double x) {
    int exponent = Math.getExponent(x);
    return x / Math.pow(2, exponent);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM