平方和小数

Sqrt and decimals

是否需要任何标准的小数位数才能从其 sqrt 分解中重构一个 error < 1 的数字?

我的意思是:sqrt(200000) = 447.21359 ... 如果我尝试只用 两位小数 重建我的号码,我有 (447.21)^2 = 199996.7841 但是如果我使用前 三位小数 我得到
(447.213)^2 = 199999.467369 与原始数字相比误差小于 1。

我需要保存的小数位数有什么公式吗?

y 为一个数,x=sqrt(y) 为平方根,假设我们有一个误差为 eps = z - x.[=18 的平方根的近似值 z =]

然后

abs(y - z^2) = abs(y - (x + eps)^2)
= abs(y - x^2 - 2 eps x  - eps^2) = abs(2 eps x + eps^2)
= O(eps x)

适合小eps。也就是说,如果你想让平方的误差小于1,那么平方根的误差应该大约小于1 / sqrt(y).

所以对于你的例子,误差应该小于

1 / sqrt(200000) = 0.002236....

如果您想更精确并考虑因素 2,则可以减半。因此,正如您发现的那样,这个公式让您需要精确到您的情况下逗号后面的第 3 位数字。

计算 a = Sqrt(200000-1)=447.2124774645716 并使用大于 a.

的 Sqrt(200000)

这里 447.21 < a447.213 > a

重新平方后的平方根等于或大于原值+/- 1时误差为1,所以只求x+1的平方根差值(误差较大+ 边)和 x 的平方根:

maximum error = sqrt(x+1) - sqrt(x)

例如:

sqrt(200001) - sqrt(200000) = 0.001118033

所以你需要 3 位数字

完整的公式是:

需要小数位数 = ceil(-log10(sqrt(x+1)-sqrt(x)))

扩展 samgak 的答案并以另一种方式阐明 cfh 的答案:

 sqrt(x+1) - sqrt(x) = 1 / (sqrt(x+1) + sqrt(x) ) < 1 /  (2*sqrt(x))

由第三个二项式。要在 sqrt(x+1)sqrt(x)sqrt(x-1) 之间的大致中点处分开,精确结果 sqrt(x) 的修改应小于 1 / (4*sqrt(x))