c++ - 在 C/C++ 中,2 double 的乘积/商精确到多少位小数

标签 c++ c floating-point

如果我有 2 个 double x 和 y 并执行 z = x/y 或 z = x * y 结果是否精确到小数点后 15 位?

编辑:抱歉,x 和 y 以及 0 和 1 之间。

最佳答案

假设2个输入数字被认为没有错误....

如果使用 binary64对于 double 和有效的除法/乘法,结果应该在 unit in the last place 的 1/2 以内是正确的给定精确数学结果的舍入到最接近模式的典型默认值。

最大相对误差为 1/2 位的幂 (2,53) 或 5.55e-17。但是以十进制打印 double 有其问题。

只要 N 最多为 DBL_DIG。对于 binary64 double,这是 15。

相关方程在 C11 §5.2.4.2.2 12. "floor((p-1)* log10 b)"--> floor((53-1)*log(2)) --> floor(15.65) --> 15.

因为我们的乘积/商只精确到 52.5 位二进制数:floor((52.5-1)*log(2)) -> floor(15.35) - -> 15

IMO:答案正确到小数点后 15 位。

注意:这通常写成前导数字、小数点和更多 14 位数字乘以 10 的幂。

[编辑]

应该“只精确到 53.5 位二进制数字:”floor((53.5-1)*log(2)) -> floor(15.80) --> 15。相同的最终结果。

关于c++ - 在 C/C++ 中,2 double 的乘积/商精确到多少位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207983/

相关文章:

c++ - 如何将 asio 与设备文件一起使用

c++ - Qt Linguist : Only . 基于 ui 的小部件已翻译,其他上下文/小部件未翻译

c++ - C++ 中的 Marsaglia 正态随机变量

c - 如何将 PEM 证书作为 i2d_X509 的第一个参数传递

c - 打印一个字符数组(C)只有第一个字母

c - #define 使用结构化指针中的成员

c++ - (1 + sqrt(2))^2 = 3 + 2*sqrt(2) 在浮点运算中是否满足?

c++ - 此函数或变量可能是不安全的 visual studio

python - 在 Python 和 NumPy 中量化正态分布 float

c - 如何在c中提取 double 值的小数部分而不进行四舍五入