最近我遇到了一个问题:
我想计算各种数字的不同根,如下所示:
x = x ** 1/y+1我所知道的任何方法都不会产生有效的代码。
方法1:
x = 54
y = 2
x = x ** 1/y+1
print(x)印刷值为28.0,而非3.7798
方法2:
x = 54
y = 2
x = x ** 1/(y+1)
print(x)印刷价值是18.0,而不是3.7798。
方法3:
x = 216
y = 2
x = x ** (1/(y+1))
print(x)印刷值为5.99而不是6
有什么办法能让你在20岁的时候工作吗?
编辑:
另一种建议的方法:
def nth_root(val, n):
ret = int(val**(1./n))
return ret + 1 if (ret + 1) ** n == val else ret
y = 1
print(nth_root(19, (y+1)))印刷品4
发布于 2016-01-27 01:01:51
既然其他人都已经告诉你为什么你的方法3是正确的,我会坚持给你一个准确的答案。你可以读到更多关于为什么你没有得到准确的6,但基本上是因为您的计算机在进行计算时没有准确地表示1/3,并且给出了最后的答案。
因此,最简单的解决方案是使用同情:
import sympy
y = 216
x = 2
x = sympy.root(y,x+1)
print(x)发布于 2016-01-27 00:23:22
您似乎还不理解编程语言中的操作顺序。你需要用括号来确保你把1加到y,然后取倒数,然后用它作为指数。“自然”秩序正好相反。
x = x ** (1.0/(y+1))发布于 2016-01-27 00:24:31
您想要的是(假设您正在使用Python 3):
x = x ** (1/(y+1))对于Python 2,以下任何一项都可以工作:
from __future__ import division
x = x ** (1/(y+1))或者(在Python 3上也很好):
x = x ** (1.0/(y+1))问题是,您需要将括号应用到正确的位置,以使操作顺序正确。
方法3是浮点算法。请参阅:https://docs.python.org/3.5/tutorial/floatingpoint.html
有关Python2vs.Python3分部的更多信息:除法在Python 2.7中。和3.3
https://stackoverflow.com/questions/35026554
复制相似问题