Java 仅增量浮点指数

Java 仅增量浮点指数,java,floating-point,bit-manipulation,java-7,Java,Floating Point,Bit Manipulation,Java 7,我希望在Java中增加浮点的指数(不接触尾数) 我了解如何使用Math.getExponent()检索指数并将其递增,但不确定如何使用位操作替换浮点的原始指数 它不像Java提供了getExponent()或类似的工具 请注意,这必须在负指数和正指数范围内正确递增。因为指数表示2的幂,只需将数字乘以2即可。这应该增加指数(假设在乘法之前和之后该数字都是标准化的)。(规范化通常在Java中自动发生,所以除非您正在做一些有趣的事情,否则这不应该成为一个问题) 如果您确实想直接操作位,可以使用Floa

我希望在Java中增加浮点的指数(不接触尾数)

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

它不像Java提供了
getExponent()
或类似的工具


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

因为指数表示2的幂,只需将数字乘以2即可。这应该增加指数(假设在乘法之前和之后该数字都是标准化的)。(规范化通常在Java中自动发生,所以除非您正在做一些有趣的事情,否则这不应该成为一个问题)


如果您确实想直接操作位,可以使用
Float.floatToIntBits
Float.intBitsToFloat
Float
Float
视图之间来回转换,这非常容易。将其转换为整数,增加指数并将其转换回整数。 考虑浮动的布局:

然后,这段代码应该完成以下任务:

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

产出:

3.1415927
6.2831855
6.2831855

你说的正常化是什么意思?我想确保数字每次都正确递增,并且没有四舍五入的问题。该死,这太聪明了+1@DavidChouinard-规范化确保尾数的第一位(或第一隐含位)不为零。在base-10科学记数法中,它就像用1.2E2(标准化)表示120,而用0.12E3(非标准化)表示120。当乘以2时,舍入不是问题。你关于负指数的注释有点奇怪。你知道指数是用偏差127表示的吗?@MartijnCourteaux:指数的编码使用偏差。问题只涉及实际指数,而不是它的编码。例如,
Math.getExponent
函数返回实际的指数值。使用偏差编码的负指数并不比使用2的补码编码的负整数更奇怪。
3.1415927
6.2831855
6.2831855