我想在Java中增加浮点数的指数(不触及尾数)。
我理解如何使用Math.getExponent()
检索指数并递增它,但我不确定如何使用位操作来替换浮点数的原始指数。
它不像Java提供getExponent()
或类似的。
请注意,这必须在负指数和正指数范围内正确递增。
答案 0 :(得分:6)
由于指数代表2的幂,只需将数乘以2.这应该增加指数(假设数在乘法之前和之后都被归一化)。 (规范化通常在Java中自动发生,因此除非你做一些有趣的事情,否则这不应该是一个问题。)
如果您确实想直接操作这些位,可以使用Float.floatToIntBits
和Float.intBitsToFloat
在float
和int
{的float
视图之间来回转换{1}}。
答案 1 :(得分:4)
这很容易。将其转换为int并增加指数并将其转换回来。 考虑一下浮动的这种布局:
然后,这段代码可以解决问题:
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