作者: Zazel
日時: 2009/8/14(22:39)
Zazelです。

=== kikwai@... (機械伯爵) さんが書かれた
=== <20090814013810.2B5E31000004@...> にて

>  でも、素の計算でまがいなりにも-1**0.5が出来るのに、
> math.sqrt(-1)のほうがきっちり領域(domain)を守ってるってのも、
> 不思議な感じがしますけどね……いや、それが正しいのか……

Python 3.1 のソースコードを斜め読みしてみました。

まずlong(長整数)とfloat(浮動小数点数)とcomplex(虚数と書くのは
気持ち悪いので複素数)では当然ながら処理がまったく違いました。

で、今回に関わるfloatでは、a**b においてaが負の数かつbが整数で
なければcomplexにまかせています。これ以外は標準関数のpow()を使用。

complexでは、bが整数以外であればオイラーの公式を由来とするexp()や
三角関数を利用した方法で計算しています。b==0 などの特別な処理も
ありますが、今回は関係ないので省略。

一方、cmath.sqrt では二次元の連立方程式で解くやりかたをしていました。

というわけで違いが出る理由は解明できました。
私の感想はスクリプト通信の次号の内容にかかわるかもしれないため、
自制ということで…。

(* SEKI Masatoshi  /  zazel.ts@..."cx"           *)
(*  Would you hold my hand? Softly, let's linger. *)