这似乎是一个非常基本的问题,但我仍然不确定我是否正确理解。
假设我定义了一些非常小和大的数字
constexpr double a = 1.53636e-34;
constexpr double b = 6.12362e-36;
constexpr double c = 6.92956e+19;并想用它们来做一些算术。在只有16位数字的情况下,双精度这样做安全吗?
编辑:让我们举一个例子。假设我们想要获得原子单位的光速。它的定义是:
double c = 2 * epsi * h * col / (e * e);哪里
double e = 1.602176634e−19;
double h = 6.62607015e−34;
double col = 299792458;
double epsi = 8.8541878128e−12;显然,我们并不关心小数点9位左右之后发生的一切。不过,我们关心的是,上述评估结果一致为137.035999.
EDIT2:公式是错的。
发布于 2019-09-05 17:35:13
它的安全性取决于您如何定义“安全”,请记住,在C++中的浮点数学只是一个近似。你提到你想做物理和相关的计算,因为一切都是物理上的近似,我不认为它会出错。实际上,double是处理您的情况的最佳工具。它具有存储效率高、速度快和相当精确的特点。问题是,这个数字有多大有多小,与精度关系不大。
https://stackoverflow.com/questions/57810034
复制相似问题