相关疑难解决方法(0)

再次访问IEEE-754双(64位浮点)与长(64位整数)

我正在重新审视一个问题(如何测试数字转换是否会改变值?),就我所关注的问题而言,我已经完全解决了.问题是检测特定数值何时会溢出JavaScript的IEEE-754数字类型.之前的问题是使用C#,标记的答案完美无缺.

现在我正在执行完全相同的任务,但这次是在Java中,它不起作用.AFAIK,Java使用IEEE-754作为其双数据类型.所以我应该能够来回摆动它以强制失去精确度,但它往返.对此感到困惑,我开始深入研究Java,现在我真的很困惑.

在C#和Java中,long的最小值和最大值都是相同的:

long MIN_VALUE = -9223372036854775808L;
long MAX_VALUE = 9223372036854775807L;
Run Code Online (Sandbox Code Playgroud)

AFAIK,这些值超出了IEEE-754中可表示的数字,因为为指数和符号保留了固定位.

// this fails in browsers that have stuck with the pure ECMAScript Number format
var str = Number(-9223372036854775808).toFixed();
if ("-9223372036854775808" !== str) { throw new Error("Overflow!"); }
Run Code Online (Sandbox Code Playgroud)

这将false在Java中返回(value = -9223372036854775808L):

boolean invalidIEEE754(long value) {
    try {
        return ((long)((double)value)) != value;
    } catch (Exception ex) {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这将false在Java中返回(value = -9223372036854775808L):

boolean invalidIEEE754(long value) {
    // trying to get closer to …
Run Code Online (Sandbox Code Playgroud)

javascript java double ieee-754 long-integer

12
推荐指数
1
解决办法
6011
查看次数

标签 统计

double ×1

ieee-754 ×1

java ×1

javascript ×1

long-integer ×1