首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中将-1 / (-343)^(1/3)计算为1/7?

如何在Python中将-1 / (-343)^(1/3)计算为1/7?
EN

Stack Overflow用户
提问于 2017-01-04 07:20:37
回答 1查看 764关注 0票数 4

我喜欢将Python集成到函数的探索中,但是我遇到了一种行为,这是我所不希望或不希望看到的。

代码语言:javascript
复制
>>> def h(x):
...     return -1 / x**(1/3)
...
>>> h(-343)
(-0.07142857142857145 + 0.12371791482634838j)

我想要一个与以下函数相反的事实:

代码语言:javascript
复制
>>> def f(x):
...     return x**3
...
>>> f(-7)
-343

使:

代码语言:javascript
复制
>>> def h(x):
...     return -1/inverse_f(x)
...
>>> h(-343)
0.14285714285714285

有什么毕达通的方法可以得到这种行为吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-04 07:35:58

如果您只想在整数中工作(并忽略函数的复杂解决方案),这可能是一种方法。至少对于标题中的例子来说,它可以做你想做的事情。(因此,这只是针对你问题的标题;由于其他问题已经改变,它将无助于.Nayuki的回答会)

gmpy2有一个iroot方法:

代码语言:javascript
复制
import gmpy2
print(gmpy2.iroot(343, 3))  # -> (mpz(7), True)

从那里开始,您应该能够组合您的功能。

代码语言:javascript
复制
import gmpy2
from fractions import Fraction

def h(x):
    sign = 1 if x >= 0 else -1
    root, is_int = gmpy2.iroot(abs(x), 3)
    if not is_int:
        return None  # the result is not an integer
    root = int(root)
    return -sign * Fraction(1, root)

print(h(-343))  # -> 1/7

反之亦然:

代码语言:javascript
复制
def g(x):
    return -Fraction(1, x**3)

print(g(h(-343)))  # -> -343
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41458263

复制
相关文章

相似问题

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