擅长:python、mysql、java
<p>幂运算符(<code>**</code>)的优先级高于除法运算符(<code>/</code>)。所以你需要设置括号:</p>
<pre><code>f = lambda x: x ** (1./3)
</code></pre>
<p>不过,浮点运算并不精确,因此必须与一些小的不确定性进行比较:</p>
<pre><code>def is_cardano_triplet(a, b, c):
f = lambda x: x ** (1. / 2)
g = lambda x: x ** (1. / 3)
return abs(g(a + b*f(c)) + g(a - b*f(c)) - 1) < 1e-10
</code></pre>
<p>现在你遇到了一个问题,负数只允许用于奇数的根,但是浮点并不精确,所以你必须手动处理负数:</p>
<pre><code>def is_cardano_triplet(a, b, c):
f = lambda x: x ** (1. / 2)
g = lambda x: (-1 if x<0 else 1) * abs(x) ** (1. / 3)
return abs(g(a + b*f(c)) + g(a - b*f(c)) - 1) < 1e-10
</code></pre>
<p>现在</p>
<pre><code>print is_cardano_triplet(2,1,5)
</code></pre>
<p>结果是<code>True</code>。</p>