6

免责声明:这个问题可能没有实际价值,它更像是一个谜题/好奇心问题。

在 Java 中,我可以编写以下代码以编程方式查找 int 的大小:

public static void main(String[] args) 
{
    int x = 1;
    int count = 1;

    while((x = x << 1) != 0)
    {           
        count++;
        System.out.println("x: " + x + ", " + count);
    }

    System.out.println("size: " + count);
}

有没有类似的方法来以编程方式查找 Java 浮点数的大小?

4

3 回答 3

8

将浮点数写入 ByteArrayOutputStream 并获取结果的长度。

import java.io.*;
class Test
    {
    public static void main(String[] args)  throws Exception
        {

        ByteArrayOutputStream baos =new ByteArrayOutputStream();
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeFloat(0f);
        System.err.println(baos.toByteArray().length);
        }
    }

$ javac Test.java 
$ java Test 
4
于 2012-07-13T07:23:38.913 回答
2

Java 浮点数遵循 IEEE 浮点标准,因此您可以轻松地了解详细信息。简而言之,浮点数的“已使用”和“未使用”部分之间没有清晰的分隔,就像使用二进制补码整数编码一样。基本划分为符号位、尾数和指数。您可能会看到使用了哪些尾数位以及使用了哪些指数位,但这绝非易事。

于 2012-07-13T07:24:52.783 回答
1

我会写一个二进制搜索。从 0 开始,然后选择正负 0.5*Float.MAX_VALUE 并继续迭代。

此方法适用于任何数字类型 - 并且应该比上面的循环快得多。

于 2012-07-13T07:28:15.760 回答