以编程方式查找浮点数的大小

时间:2012-07-13 07:15:52

标签: java

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

在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浮点数的大小?

3 个答案:

答案 0 :(得分:8)

将float写入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

答案 1 :(得分:2)

Java浮点符合IEEE浮点标准,因此您可以轻松地了解详细信息。简而言之,浮点数的“已使用”和“未使用”部分之间没有干净的分离,因为它与二进制补码整数编码一致。基本划分为符号位,尾数和指数。您可能会看到使用了哪些尾数位以及使用了哪些指数位,但它远非一项微不足道的任务。

答案 2 :(得分:1)

我会写二分搜索。从0开始,然后转到正负0.5 * Float.MAX_VALUE并继续迭代。

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