【问题标题】:Calculating cube root: OverflowError: ('Result too large')计算立方根:溢出错误:('结果太大')
【发布时间】:2017-02-15 21:04:38
【问题描述】:

因此,我应该创建一个代码来计算输入数字的立方根,近似值最多为小数点后 2 位。上面的代码计算了一个数字的平方根,最多有 2 个小数位:

epsilon = 0.01
guess = num/2.0
while abs(guess**2 - num) >= epsilon:
    guess = guess - abs(guess**2 - num) / (2 * guess)
print("Guess:", guess)

显然,我可以通过修改给出的代码并在代码中使用它来使用该标准计算立方根:

delta = abs(guess**3 - num) / 100.0

我尝试使用该行并修改用于平方根的代码,但我不断得到:

OverflowError: ('Result too large') 

这是我的代码到目前为止的样子:

num = float(input("Enter a number: "))
epsilon = 0.01
guess = num/2.0
while abs(guess**3 - num) >= epsilon:
    guess = abs(guess - (guess**3 - num)/100.0)
print("Guess:", guess)

当我在上面运行该代码时,会发生以下情况:

runfile('C:/Users/100617828/Documents/CSCI1040U/edits.py', runfile('C:/Users/100617828/Documents/CSCI1040U/edits.py', wdir='C:/Users/100617828 /文档/CSCI1040U')

输入一个数字:34 Traceback(最近一次调用最后一次):

文件“”,第 1 行,在运行文件中('C:/Users/100617828/Documents/CSCI1040U/edits.py', wdir='C:/Users/100617828/Documents/CSCI1040U')

文件“C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 699 行,在运行文件 execfile(文件名,命名空间)中

文件“C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py”,第 88 行,在 execfile exec(compile(open(filename, 'rb').read(), filename , 'exec'), 命名空间)

文件“C:/Users/100617828/Documents/CSCI1040U/edits.py”,第 11 行,在 while abs(guess**3 - num) >= epsilon:

OverflowError: (34, '结果太大')

编辑

这是我的作业表告诉我要做的,但似乎我不需要使用delta = abs(guess**3 - num)/100.0

【问题讨论】:

  • edit您的问题,并包括回溯、文件名、行号等的全文。你了解如何计算立方根的数学吗?
  • 你需要那个迭代近似吗? x**(1/3) 如何为您工作?
  • 对不起,第一次使用 stackoverflow,我包含了回溯,我明白在一个简单的等式中,您可以通过将一个数字作为 (1/3) 的指数来计算立方根。
  • 为什么你认为你可以使用delta = abs(guess**3 - num) / 100.0,而平方根的情况并非如此。 (这是牛顿迭代法)
  • 这只是在我的作业说明中并作为提示给出的,老实说我什至不知道代码是如何工作的。

标签: python python-3.x


【解决方案1】:

您使用的方法称为Newton-Raphson approximation,并且您应该使用您尝试求解的函数的一阶导数作为分母。因为x^3的一阶导数是3*x^2,所以迭代行必须是:

guess = guess - abs(guess**3 - num) / (3 * guess**2)

https://repl.it/DqZA/0查看工作代码

【讨论】:

  • 对不起,我可以请您解释更多吗?您似乎能够得到正确的近似值,但我的老师和我的作业说明中给出了“delta = abs(guess**3 - num) / 100.0”作为提示。我不太确定代码在一般情况下是如何工作的,无论是您向我展示的固定代码还是作为示例给出的代码。
  • @Langfao 我不确定那个提示(可能是红鲱鱼),但如果你检查第一个(平方根)示例,你会发现分母不是常数,而是 @ 987654327@。这是因为x^2 的导数是2*x。您可以阅读Wikipedia entry 以了解有关该方法的数学运算的更多信息。
  • 那个提示真的是想把人们赶走吗?我正在学习编程课程,而且我是编码新手,我班上的许多其他人也是如此。
  • @Langfao 我不会这么说,但也许你的导师希望你自己做一些研究并找到正确的公式。
猜你喜欢
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
相关资源
最近更新 更多