![]() |
1
64
爪哇
计数
对于“100到100.1”这样的任意范围,更难实现,因为上限不能精确表示为
不同的
|
![]() |
2
38
每个
间隔[1.0,2.0]对应于
间隔[100.0,101.0]对应于
在10^100和10^100+1之间没有双精度 . 这些数字中的任何一个都不能用双精度表示,而且它们之间也没有双精度。最近的两个双精度数字是:
和
|
![]() |
3
6
其他人已经解释说,在这个范围内大约有2^62个双精度值[0.0,1.0]。
但是你提到了随机数生成器:注意,随机数生成器生成的数字介于0.0和1.0之间
不能
一般来说,产生所有这些数字;通常它只产生n个/n 2个数n的整数(参见例如Java文档)。
nextDouble
)所以通常只有2^53(+/-1,取决于包括哪些端点)的可能值
|
![]() |
4
3
文章 Java's new math, Part 2: Floating-point numbers IBM提供了以下代码片段来解决这个问题(在float中,但我怀疑它也适用于double):
他们对此有如下评论:
|
![]() |
5
2
见 wikipedia article 更多信息。 |
![]() |
6
1
Java双是IEEE 754二进制数。 这意味着我们需要考虑:
这基本上意味着总共有2^62-2^52+1个可能的双重表示,根据标准,介于0和1之间。请注意,2^52+1是为了删除非标准化数字的大小写。 记住,如果尾数是正数,而指数是负数,则尾数是正数,但小于1:-) 对于其他数字来说,这有点困难,因为边缘整数在IEEE 754表示中可能无法以精确的方式表示,并且因为指数中使用了其他位来表示数字,所以数字越大,不同的值越低。 |
![]() |
Denis · 双精度C++,308位数字或15位数字? 2 年前 |
![]() |
nellapizza · python楼层划分操作符是如何实现的? 6 年前 |
![]() |
comte · 如何在SQL数据库中存储python浮点 6 年前 |
![]() |
user2255757 · 如何正确分配cuda半精度阵列? 6 年前 |
![]() |
Hari · 除以2后的结果与乘以0.5后的结果之差 6 年前 |
![]() |
gansub · Newton Raphson迭代-无法迭代 6 年前 |
![]() |
Alex · 任意精度的numpy数组(10位int) 6 年前 |