将小(1.0E-12)数字存储为科学计数法的双精度数

时间:2013-03-07 16:45:46

标签: c double scientific-notation

以下是设置:

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

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

我想通过在10 ^( - 12)的顺序中将一些(如50个)随机生成的4向量添加到最后三个组件来模拟实验数据,这样它们就很小(这就是有趣的物理发生的地方) ),但显着高于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)之间的随机数,最大三位小数,因此在“实际”双精度数中,我得到15位小数。

现在到了这一点:我可以按顺序存储数字超过三位小数而不会超出双浮点精度吗?

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

1 个答案:

答案 0 :(得分:1)

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