Tag: 浮点

丢失精度从java BigDecimal转换为double

我正在使用完全基于双精度的应用程序,并且在一个将字符串解析为double的实用程序方法中遇到问题。 我找到了一个修复,使用BigDecimal进行转换解决了这个问题,但是当我将BigDecimal转换回double时又引发了另一个问题:我失去了几个精度。 例如: import java.math.BigDecimal; import java.text.DecimalFormat; public class test { public static void main(String [] args){ String num = “299792.457999999984”; BigDecimal val = new BigDecimal(num); System.out.println(“big decimal: ” + val.toString()); DecimalFormat nf = new DecimalFormat(“#.0000000000”); System.out.println(“double: “+val.doubleValue()); System.out.println(“double formatted: “+nf.format(val.doubleValue())); } } 这会产生以下输出: $ java test big decimal: 299792.457999999984 double: 299792.458 double formatted: 299792.4580000000 […]

在Java中从double转换为float

如果我正在使用double ,并将其转换为float ,那么它是如何工作的呢? 该值是否被截断以便它适合浮点数? 或者价值得到不同的结果? 对不起,如果这听起来有点补救,但我正在努力掌握float和double转换的概念。

Java中的半精度浮点

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

double或float数据类型在循环中没有正确加载?

在循环中,我添加0.10,直到达到所需的#,并获得索引。 这是我的代码: private static int getIndexOfUnits(float units) { int index = -1; float addup = 0.10f; for(float i = 1.00f; i < units; i=(float)i+addup) { index++; System.out.println("I = " + i + " Index = " + index); } return index; } 如果通过的单位是5.7,我看到的输出是: I = 1.0 Index = 0 I = 1.1 Index = 1 […]

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编码的双精度浮点数? 谢谢

java中双精度乘法的准确性?

对于java中的double值,乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但220是双数。 220.00000000000003是220后的下一个双倍。

Float.NaN == Float.NaN

为什么这种比较会让我“假”? 我查看了源代码并将Float.NaN定义为 /** * A constant holding a Not-a-Number (NaN) value of type * float. It is equivalent to the value returned by * Float.intBitsToFloat(0x7fc00000). */ public static final float NaN = 0.0f / 0.0f; 编辑:令人惊讶的是,如果我这样做: System.out.println(“FC ” + (Float.compare(Float.NaN, Float.NaN))); 它给了我0 。 所以Float.compare()确实认为NaN等于它自己!

Java浮点数表示为hex数

为什么0x1p3等于8.0 ? 为什么0x1e3等于483 ,而0x1e3d等于7741 ? 由于1e3d等于1000.0 ,因此令人困惑。

双原语类型数据的意外行为

我想了解Java double类型如何在Java中将其值存储在内存中。 当我运行以下代码时,我得到意外的输出: public static void main(String[] args) { float a = 1.5f; float b= 0.5f; double c= 1.5; double d = 0.5; float a1 = 1.4f; float b1= 0.5f; double c1= 1.4; double d1 = 0.5; System.out.println(” a- b is ” + (ab)); System.out.println(” c- d is ” + (cd)); System.out.println(“a1-b1 is ” + […]

Java:使用双重不准确

可能重复: 使用java中的双打保留精度 Java程序中奇怪的浮点行为 我正在进行直方图课程,我遇到了一个奇怪的问题。 以下是该类的基础知识,有更多方法,但它们与问题无关。 private int[] counters; private int numCounters; private double min, max, width; public Histogram(double botRange, double topRange, int numCounters) { counters = new int[numCounters]; this.numCounters = numCounters; min = botRange; max = topRange; width = (max – min) / (double) numCounters; } public void plotFrequency() { for (int i = 0; […]