相关疑难解决方法(0)

0.0到1.0之间有多少个双数?

这是我多年来一直想到的事情,但我从来没有花时间问过.

许多(伪)随机数生成器生成0.0到1.0之间的随机数.在数学上,此范围内有无限数,但是double是浮点数,因此具有有限的精度.

所以问题是:

  1. double在0.0和1.0之间有多少个数字?
  2. 是否有1到2之间的数字?100到101之间?在10 ^ 100和10 ^ 100 + 1之间?

注意:如果它有所不同,我double特别感兴趣的是Java的定义.

random floating-point precision double

92
推荐指数
3
解决办法
8726
查看次数

基于随机比特流生成随机浮点值

给定随机源(随机比特流的生成器),如何在给定范围内生成均匀分布的随机浮点值?

假设我的随机源看起来像:

unsigned int GetRandomBits(char* pBuf, int nLen);
Run Code Online (Sandbox Code Playgroud)

我想实施

double GetRandomVal(double fMin, double fMax);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我不希望限制结果精度(例如只有5位数).
  • 严格的统一分配是必须的
  • 我不是要求提供对现有库的引用.我想知道如何从头开始实现它.
  • 对于伪代码/代码,C++将是最受欢迎的

c++ random algorithm

6
推荐指数
2
解决办法
2133
查看次数

寻找接近的浮点数之间的“离散”差异

假设我有两个浮点数xy,它们的值非常接近。

计算机上可以表示离散数量的浮点数,因此我们可以按升序枚举它们:f_1, f_2, f_3, ...x我希望找到和在此列表中的距离y(即它们是 1、2、3、... 还是n离散步长?)

是否可以仅使用算术运算(+-*/)而不查看二进制表示来做到这一点?我主要感兴趣的是它在 x86 上的工作原理。

假设 和y > x之间x只有y几步(例如 < 100),下面的近似值是否正确?(可能不会 ...)

(y-x) / x / eps
Run Code Online (Sandbox Code Playgroud)

这里eps表示机器 epsilon。(机器 epsilon 是 1.0 和下一个最小浮点数之间的差。)

floating-point numerical x87

5
推荐指数
1
解决办法
963
查看次数

标签 统计

floating-point ×2

random ×2

algorithm ×1

c++ ×1

double ×1

numerical ×1

precision ×1

x87 ×1