作者: 藤岡和夫
日時: 2009/8/13(15:32)
藤岡です。手持ちにActivePythonの3.1を追加して、単に追試しただけです^^;)

-----
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> 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)
[-1, -2]
>>>
-----
Python 3.0 (r30:67507, Dec  3 2008, 20:14:27) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> 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.99999999999999989+1.4142135623730951j), (-1-1.4142135623730951j)]
>>>
-----
ActivePython 3.1.0.1 (ActiveState Software Inc.) based on
Python 3.1 (r31:73572, Jun 28 2009, 19:55:39) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> 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)]
>>>
-----

On Thu, 13 Aug 2009 13:12:10 +0900 (JST)
Zazel <zazel.ts@...> さんwrote:

> Zazelです。
> 
> あるところ(^_^) に書かれていた、二次元方程式の解の公式。
> Pythonならば複素数が扱えるなと入れてみたら…
> 
> >>> 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)]
> 
> この演算で実部に違いが出てくるのはまずいような気がします。
> それに、なぜ違いが発生するのかも理解できません。
> 
> 「Python-3.1 はまだunstableだから」という理由で片付けてよければ
> これ以上気にしませんが。
> 
> 使ったのは
>     Python 3.1
>     [GCC 4.2.1 20070719  [FreeBSD]] on freebsd7
> です。
> 
> (* SEKI Masatoshi  /  zazel.ts@..."cx"           *)
> (*  Would you hold my hand? Softly, let's linger. *)

藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html