Tag: ieee 754

Java中的0.0和-0.0(IEEE 754)

Java完全兼容IEEE 754吧? 但我对java如何决定浮点加法和减法的符号感到困惑。 这是我的测试结果: double a = -1.5; double b = 0.0; double c = -0.0; System.out.println(b * a); //-0.0 System.out.println(c * a); //0.0 System.out.println(b + b); //0.0 System.out.println(c + b); //0.0 System.out.println(b + c); //0.0 System.out.println(b – c); //0.0 System.out.println(c – b); //-0.0 System.out.println(c + c); //-0.0 我认为在乘法和除法中,符号的确定如下:符号(a)xor符号(b),但我想知道为什么0.0 + -0.0 = 0.0,Java如何决定加法和减法的符号? 它是在IEEE 754中描述的吗? […]

再次访问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; 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!”); } 这在Java中返回false (值= -9223372036854775808L): boolean invalidIEEE754(long value) { try { […]

任何符合IEEE754(r)标准的Java实现?

是否有任何完全符合IEEE的IEEE754r实现可用于Java,它们支持Java选择省略的所有function(或者更确切地说是高级语言,如省略): 陷阱 粘滞的旗帜 定向舍入模式 延长/长双 四精度 DPD(密集小数) 在任何人弄错之前澄清:我不是在寻找JVM来为上面提供任何支持,只是在软件中实现类型和操作的一些类,基本上是已经存在的原始包装类的样式Float /双。

其他NaN值是多少?

java.lang.Double.NaN的文档说它是 保持double类型的Not-a-Number(NaN)值的常量。 它等效于Double.longBitsToDouble(0x7ff8000000000000L)返回的Double.longBitsToDouble(0x7ff8000000000000L) 。 这似乎暗示还有其他人。 如果是这样,我如何抓住它们,这可以移植吗? 要清楚,我想找到double值x这样的 Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(Double.NaN) 和 Double.isNaN(x) 都是真的。

Java中的半精度浮点

是否有可以在IEEE 754半精度数字上执行计算或者将它们转换为双精度和从双精度转换的Java库? 这些方法中的任何一种都是合适的: 将数字保持为半精度格式,并使用整数算术和位进行计算( MicroFloat用于单精度和双精度) 以单精度或双精度执行所有计算,转换为半精度进行传输(在这种情况下,我需要的是经过良好测试的转换函数。) 编辑 :转换需要100%准确 – 输入文件中有很多NaN,无穷大和次正规。 相关问题,但对于JavaScript: 在Javascript中解压缩半精度浮点数

Java – 将hex转换为IEEE-754 64位浮点数 – 双精度

我正在尝试将以下hex字符串:“41630D54FFF68872”转换为9988776.0(float-64)。 使用单精度浮子-32我会这样做: int intBits = Long.valueOf(“hexFloat32”, 16).intValue(); float floatValue = Float.intBitsToFloat(intBits); 但是抛出一个:java.lang.NumberFormatException:使用上面的64位hex时的无限或NaN。 如何将hex转换为使用64位IEEE-754编码的双精度浮点数? 谢谢

为什么将Double.NaN转换为int而不是在Java中抛出exception?

所以我知道IEEE 754为非实数的值指定了一些特殊的浮点值。 在Java中,将这些值转换为原始int不会像我期望的那样抛出exception。 相反,我们有以下内容: int n; n = (int)Double.NaN; // n == 0 n = (int)Double.POSITIVE_INFINITY; // n == Integer.MAX_VALUE n = (int)Double.NEGATIVE_INFINITY; // n == Integer.MIN_VALUE 在这些情况下不抛出exception的理由是什么? 这是IEEE标准,还是仅仅是Java设计者的选择? 如果这种演员阵容有例外情况,我是否会发现不良后果?

为什么从float转换为double会改变这个值?

我一直试图找出原因,但我不能。 有谁能够帮助我? 请看以下示例。 float f; f = 125.32f; System.out.println(“value of f = ” + f); double d = (double) 125.32f; System.out.println(“value of d = ” + d); 这是输出: 值f = 125.32 值d = 125.31999969482422