c - 将小 (1.0E-12) 数字存储为科学记数法中的 double

标签 c double scientific-notation

这是设置:

在我的学士论文中,我想测试大型强子对撞机使用的喷射算法。基本上第一步是以下步骤:给定一些 4 动量

p[0] = nullvector(45.0000000000106,33.03951484238976,14.97124733712793,26.6317895033428)

我想通过以 10^(-12) 的顺序向最后三个分量添加一些(比如 50 个)随机生成的 4 vector 来模拟实验数据,这样它们就很小(这就是有趣的物理学发生的地方), 但明显高于 15 位小数的双浮点精度。因此,快速而肮脏的解决方案如下:

seed=time(NULL);
srand(seed);
random=(rand()%9001)*1.0E-15;
random=random+1E-12;
printf("%.15E\n",random);

这给了我 1E-12 和 10E-12 (=1E-11) 之间的随机数,最多三位小数,所以在“真正的” double 中,这给了我 15 位小数。

现在进入正题:我可以在不超过双浮点精度的情况下按小数点后三位以上的顺序存储数字吗?

PS:有没有更好的生成小随机数的方法? (这听起来像是另一个话题;))

最佳答案

创建浮点随机数的传统方法是通过取 double x = (double)rand()/RAND_MAX; 使其成为范围 [0-1) - 然后乘以 9001E-1 将您的范围扩展到 1E-121E-15 值 [包括零在内]。

关于c - 将小 (1.0E-12) 数字存储为科学记数法中的 double ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15276875/

相关文章:

java - 数字格式/打印错误

javascript - 使用正则表达式删除指数数的尾随零

javascript - MOS 6502 仿真器增强了科学记数法的基本输出

Python 任意数字转非科学字符串

c - 如何在下一行之前打印n个字符?

c - 将编程语言嵌入到程序中

c - 如何避免C中的sscanf()引起无限的while循环,而不是存储用户输入?

objective-c - 为什么守护进程会随机停止?

geolocation - Java 中的地理坐标可以双重确定吗?

java - 将 Java Double.Max_VALUE 与大双数进行比较返回 true