- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
根据 java.util.Random 的文档, Java类工具 nextFloat
通过 next(24) / ((float)(1 << 24))
(即 24 位除以 224 的随机非负整数)。该文档声称可以返回所有 224 可能的值。它们介于 0(含)和 1(不含)之间。但是,我不认为这是真的。
首先,请注意,根据 IEC 559 (IEEE 754) 标准,float
有 23 个小数位。但是有一个值为 1 的隐式前导位(在二进制小数点的左侧),除非指数存储为全零。因此,一共有 224 个类型为 float
的值。介于 0(包括 - 不包括负零)和 1(不包括负零)之间,但恰好有一半的数字是次正规的(指数中的所有位均为 0),这使得它们都小于 2-126
。因此,这些数字都不能由实现生成。这是因为它们都严格小于实现中使用的 2-24。
float
的布局可以在 Single-precision floating-point format 找到.
那么我缺少的是什么?
最佳答案
在区间 [+0, 1) 中,有 127•223 个值可以用 float
表示,而不是 224。从0到126(含)的指数编码字段的每一种组合都有一个,尾数编码字段中每个值23位。
m•2−24 形式的每个值,其中 0 ≤ m < 224,是可代表的。这种形式的最小非零值是 2−24,用指数代码 103 和有效数字代码 0 表示。数学指数是代码 103 减去偏差, 127,等于-24,有效数为1。
对于非零的任何这样的m,让b为其前导1位的位置编号(从0开始编号为低位)。然后m•2−24被编码为float
,指数代码为b+103,尾数代码为b+103 m•224− b−224。对于 m = 0,它用全零位编码。
这种形式的数字都不是次正规的。
关于java - 为什么 Oracle 声称 java.util.Random.nextFloat() 生成 2^24 种可能性而不是 2^23 种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58059231/
我正在尝试使用此代码生成随机 float 。 float rangeDuration2 = maxDuration - minDuration; 但由于某种原因,java 不允许我像使用 .next
这个问题在这里已经有了答案: Scanner double value - InputMismatchException (2 个答案) 关闭 6 年前。 如果我执行下面的代码: import ja
最初在 Eclipse 中运行以下命令导致 Scanner 无法识别控制台中的回车符,有效地阻止了进一步的输入: price = sc.nextFloat(); 在代码之前添加这一行会导致 Scann
float minX = 50.0f; float maxX = 100.0f; Random rand = new Random(); float finalX = rand.nextFloat(m
我试图从由整数和浮点值组成的文件中仅读取浮点值,但是当我执行 scan.nextFloat() 时,它仍然读取下一个整数值并将其转换为 float 并将其添加到我的点列表中。下面是我正在做的事情。 w
我需要它跳过文本文件的第一行,然后跳过表格的前两列。到目前为止我已经: }public static float [][] read_data(String strFileName){
这段代码没有语法错误,但是当我输入浮点值时,出现了InputMismatchException。 Double 值而不是 float 会得到相同的异常。如果我以 F.f 格式(带点)输入每个值,则会出
自从听说 java 的 SplittableRandom 以来,我一直在使用它,因为它速度快,而且不需要多线程。然而,虽然它几乎包含了 Random 类的所有方法,但它并没有随 nextFloat()
我开始编写 C++,我正在尝试读取格式如下的文本文件: 32.0 12.43 503.2 3.212 等等 在 Java 中,我可以将 Scanner 与 .nextFloat()
我有一个 while 条件,当文件有下一个 float (scanner.hasNextFloat()) 时从文本文件中读取并将 float 分配给数组。但是,我收到 java.util.InputM
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
所以我正在编写一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中收到此错误异常。 我看到一篇文章说要使用 nex
我正在阅读 java.util.Random 类并注意到没有 nextDouble()、nextFloat() 和 nextLong() 可以接受一个绑定(bind)。 有很多方法可以完成它like
一方面,Math.random() 或 new Random().nextFloat() 应该返回 0 到 1 之间的值,但不包括 1,另一方面, float 可能不准确,该值可能会因实际情况而异值(
根据 java.util.Random 的文档, Java类工具 nextFloat通过 next(24) / ((float)(1 << 24)) (即 24 位除以 224 的随机非负整数)。该文
我是一名优秀的程序员,十分优秀!