Zazelです。
=== kikwai@... (機械伯爵) さんが書かれた
=== <20090813133733.07E441000004@...> にて
>> >>> sol = lambda a,b,c:[(-b+k*(b*b-4*a*c)**(1/2))/(2*a) for k in (1,-1)]
>> >>> sol(1,2,3)
>> [(-0.9999999999999999+1.4142135623730951j), (-1-1.4142135623730951j)]
これを
>>> import cmath
>>> sol = lambda a,b,c:[(-b+k*cmath.sqrt(b*b-4*a*c))/(2*a) for k in (1,-1)]
>>> sol(1,2,3)
[(-1+1.4142135623730951j), (-1-1.4142135623730951j)]
にすると問題ないところがあれですね。
> 実は次号掲載予定の「やnPy」のおまけにも書いたのだけど、複素数/虚数
> に関して、どーもおかしな挙動をするみたいです(以下、Python 3.1 for Win)
おかしな挙動というか手抜きなんじゃないかと思っています。
普通に複素数でべき算を計算しようとすればオイラーの公式を使うと
思うので、それで誤差が現れるのではないかとの考えに至りました。
虚部だけの複素数だったら、一時的に虚数をはずして実数のべき乗の
アルゴリズムを使えばいいのに、それをしていないのではないかとね。
というわけで、cmath.pow がないのが変ということで。(^_^;)
(* SEKI Masatoshi / zazel.ts@..."cx" *)
(* Would you hold my hand? Softly, let's linger. *)