![](/img/trans.png)
[英]How to convert Java double to byte[], and byte[] to double (IEEE 754 double-precision binary floating-point format)
[英]How accurate is “double-precision floating-point format”?
假设使用Java输入
双数
如果我需要使用非常大或非常小的值,它们的精度如何? 我试图阅读双打和浮球的工作原理,但我并没有真正理解它。
对于我的编程入门学期项目,我可能需要使用具有较大价值范围(多个数量级)的不同数字。
假设我创建了一个while循环,
while (number[i-1] - number[i] > ERROR) {
//does stuff
}
ERROR的限制是否取决于number [i]的大小? 如果是这样,我如何确定ERROR可以减小多少以退出循环?
我知道我的老师在某个时候解释过它,但是我似乎在笔记中找不到它。
ERROR的限制是否取决于number [i]的大小?
是。
如果是这样,我如何确定ERROR可以减小多少以退出循环?
您可以使用Math.nextUp
获得“下一个最大”的双Math.nextUp
(或使用Math.nextUp
获得“下一个最小的” Math.nextDown
),例如
double nextLargest = Math.nextUp(number[i-1]);
double difference = nextLargest - number[i-1];
正如Radiodef指出的那样,您还可以使用Math.ulp
直接获得差异:
double difference = Math.ulp(number[i-1]);
(但我认为“下一个最小”没有等效的方法)
如果您不告诉我们您想使用它什么,那么我们只能回答标准知识:Java中的double
大约有16位有效数字(即十进制数字系统的数字),并且最小可能的值为4.9 x 10 -324 。 这完全有可能比您需要的精度更高。
问题中的epsilon值(您称为“错误”)根据您的计算而有所不同,因此没有标准答案,但是如果您对简单的东西使用double而不是对科学要求很高的东西,则使用类似1 x 10 -9 ,您会没事的。
float和double基本类型在它们可以存储的数据量方面都受到限制。 但是,如果您想知道这两种类型的最大值,请使用自己喜欢的IDE运行以下代码。
System.out.println(Float.MAX_VALUE);
System.out.println(Double.MAX_VALUE);
double
数据类型是双精度64位IEEE 754浮点(精度位数可以在15到17个十进制数字之间)。 float
数据类型是单精度32位IEEE 754浮点(精度数字可以在6到9个十进制数字之间)。 运行上面的代码后,如果您对它们的范围不满意,那么我建议您使用BigDecimal,因为这种类型没有限制(而是您的RAM是限制)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.