仅递增浮点指数

时间:2014-02-16 22:15:39

标签: java floating-point bit-manipulation java-7

我想在Java中增加浮点数的指数(不触及尾数)。

我理解如何使用Math.getExponent()检索指数并递增它,但我不确定如何使用位操作来替换浮点数的原始指数。

它不像Java提供getExponent()或类似的。

请注意,这必须在负指数和正指数范围内正确递增。

2 个答案:

答案 0 :(得分:6)

由于指数代表2的幂,只需将数乘以2.这应该增加指数(假设数在乘法之前和之后都被归一化)。 (规范化通常在Java中自动发生,因此除非你做一些有趣的事情,否则这不应该是一个问题。)

如果您确实想直接操作这些位,可以使用Float.floatToIntBitsFloat.intBitsToFloatfloatint {的float视图之间来回转换{1}}。

答案 1 :(得分:4)

这很容易。将其转换为int并增加指数并将其转换回来。 考虑一下浮动的这种布局:

enter image description here

然后,这段代码可以解决问题:

public static float increaseExponent(float f)
{
    int bits = Float.floatToIntBits(f);
    bits += 0x800000;
    return Float.intBitsToFloat(bits);
}

在这里演示:http://ideone.com/vs8BrG

float f = (float) Math.PI;
System.out.println(f);
System.out.println(f * 2.0f);
System.out.println(increaseExponent(f));

输出:

3.1415927
6.2831855
6.2831855