如何计算立方根的近似值?

问题描述 投票:0回答:1

我必须做一个数学练习,要求我用 10^-5 的幅度构建 √3。
使用扫描方法和Python。
我是法国人,所以我不知道“扫荡”这个词是否正确。
在练习的早期,我得到了一些提示:
√3 是方程 x^2 - 3 = 0
的解 我需要达到 x*y 为负数的点
所以我尝试了这个:

x = 1
y = 1 + 10**-5 
while (x** 2 - 3) * (y** 2 - 3) >= 0 :  
    x = x + 10**-5
    y = y + 10**-5
print(x)

它给出了正确答案:1.73205,所以我可以框架 1.73205 < √3 < 1.73206 Do you know other ways to do this kind of maths ? Is there a "sweep" function for example? (Sorry if wrong word)

python math square-root
1个回答
0
投票

你知道做这种数学的其他方法吗

如果您的任务是使用“扫描”方法,您可以逐步建立答案,从一个大增量(一)开始,然后逐渐减少增量,例如,

In [73]: %reset -f
    ...: from fractions import Fraction as F
    ...: from decimal import Decimal as D
    ...: 
    ...: x = F(1,1); y = F(1,1); ten = F(10,1)
    ...: for exp in range(21):
    ...:     d = pow(ten, -exp)
    ...:     while (x*x-3)*(y*y-3) > 0:
    ...:         x, y = y, x+d
    ...:     y = x
    ...:     decimal = D(x.numerator)/D(x.denominator)
    ...:     fill = '0' if exp else '.'
    ...:     print('%2d'%(exp), str(decimal).ljust(exp+2, fill))
 0 1.
 1 1.7
 2 1.73
 3 1.732
 4 1.7320
 5 1.73205
 6 1.732050
 7 1.7320508
 8 1.73205080
 9 1.732050807
10 1.7320508075
11 1.73205080756
12 1.732050807568
13 1.7320508075688
14 1.73205080756887
15 1.732050807568877
16 1.7320508075688772
17 1.73205080756887729
18 1.732050807568877293
19 1.7320508075688772935
20 1.73205080756887729352

In [74]: 

由于浮点数的精度有限,因此在代码中我使用了两个不同的 Python 标准库,

fractions
decimals
,以便能够以任意精度计算
sqrt(3)

所有数字

x
y
ten
都被初始化为
Fractions
,这意味着它们始终表示为两个 Python 整数之比(即任意精度),所有中间结果表示为也
Fractions

最终,

Decimal
类用于将我们的结果表示为任意精度的浮点。

我稍微调整了一下格式,以获得完美的梯形输出,但如果你愿意,你可以简单地

print(exp, decimal)

© www.soinside.com 2019 - 2024. All rights reserved.