如果我有 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/