gpt4 book ai didi

java - 为什么对于某些值会有无穷大的结果,而对于其他值却没有无穷大的结果?

转载 作者:行者123 更新时间:2023-12-01 07:24:31 25 4
gpt4 key购买 nike

首先,抱歉我的英语不好......

今天我尝试检查是否 Integer.MAX_VALUE*Integer.MAX_VALUE

    System.out.println("long*long= "+Long.MAX_VALUE*Long.MAX_VALUE);
System.out.println("int*int= "+Integer.MAX_VALUE*Integer.MAX_VALUE);
System.out.println("double*double= "+Double.MAX_VALUE*Double.MAX_VALUE);
System.out.println("float*float= "+Float.MAX_VALUE*Float.MAX_VALUE);
System.out.println("short*short= "+Short.MAX_VALUE*Short.MAX_VALUE);

结果:

长*长= 1

int*int=1

双*双=无穷大

浮点*浮点=无穷大

短*短= 1073676289

这是为什么呢?如果 float^2=Infinity,那么 long^2 也应该是 Infinity...而 1 显然是一个错误...有人知道吗? tnx

最佳答案

http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.17.1

If an integer multiplication overflows, then the result is the low-order bits of the mathematical product as represented in some sufficiently large two's-complement format.

您的整数答案太大,无法适应结果类型,因此真实答案的高位将被简单地丢弃。

(2^n-1) * (2^n -1) 是 2^2n - 2*2^n + 1,即 1 模 2^n - 所以您得到了预期的答案。

浮点类型的规则不同。

关于java - 为什么对于某些值会有无穷大的结果,而对于其他值却没有无穷大的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com