首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X ** 1/3在python?

X ** 1/3在python?
EN

Stack Overflow用户
提问于 2016-01-27 00:17:18
回答 5查看 2.4K关注 0票数 0

最近我遇到了一个问题:

我想计算各种数字的不同根,如下所示:

代码语言:javascript
复制
x = x ** 1/y+1

我所知道的任何方法都不会产生有效的代码。

方法1:

代码语言:javascript
复制
x = 54
y = 2
x = x ** 1/y+1
print(x)

印刷值为28.0,而非3.7798

方法2:

代码语言:javascript
复制
x = 54
y = 2
x = x ** 1/(y+1)
print(x)

印刷价值是18.0,而不是3.7798。

方法3:

代码语言:javascript
复制
x = 216
y = 2
x = x ** (1/(y+1))
print(x)

印刷值为5.99而不是6

有什么办法能让你在20岁的时候工作吗?

编辑:

另一种建议的方法:

代码语言:javascript
复制
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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-27 01:01:51

既然其他人都已经告诉你为什么你的方法3是正确的,我会坚持给你一个准确的答案。你可以读到更多关于为什么你没有得到准确的6,但基本上是因为您的计算机在进行计算时没有准确地表示1/3,并且给出了最后的答案。

因此,最简单的解决方案是使用同情:

代码语言:javascript
复制
import sympy

y = 216
x = 2
x = sympy.root(y,x+1)
print(x)
票数 3
EN

Stack Overflow用户

发布于 2016-01-27 00:23:22

您似乎还不理解编程语言中的操作顺序。你需要用括号来确保你把1加到y,然后取倒数,然后用它作为指数。“自然”秩序正好相反。

代码语言:javascript
复制
x = x ** (1.0/(y+1))
票数 3
EN

Stack Overflow用户

发布于 2016-01-27 00:24:31

您想要的是(假设您正在使用Python 3):

代码语言:javascript
复制
x = x ** (1/(y+1))

对于Python 2,以下任何一项都可以工作:

代码语言:javascript
复制
from __future__ import division
x = x ** (1/(y+1))

或者(在Python 3上也很好):

代码语言:javascript
复制
x = x ** (1.0/(y+1))

问题是,您需要将括号应用到正确的位置,以使操作顺序正确。

方法3是浮点算法。请参阅:https://docs.python.org/3.5/tutorial/floatingpoint.html

有关Python2vs.Python3分部的更多信息:除法在Python 2.7中。和3.3

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35026554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档