色々あって複素数が必要な場面の場合、複素数をどう表現するのか、ということを調べてきました。
Perlの場合、
use Math::Complex;すればよい。私の環境では既に入っていた。ただ、気になったのは
print i*i,"\n";の結果が
[1,pi]と極形式になること。
なお、さっきのコードを見ればわかるように演算子は普通に実数で使っていたものが(オーバーロードされていて)使えるし、
iと書けば虚数単位として認識される。
共役複素数を返す単項演算子は
~である。
use Math::Complex; $z=1+2*i; print ~$z;というコードを書けば、
1-2iと、今度は直交形式で表示される。
ほかに、
print sin(i);とか数学関数に複素数を放り込んでもちゃんと計算してくれるし(この場合は
1.1752011936438iと表示された)、使いやすい。
Pythonの場合、複素数型がビルトインになっている。但し、虚数単位には
jを使う(数値の後ろに付けると、その数値は実数ではなく純虚数とみなされる)。特に何もせず、
print 1j*1j;とだけすると、
(-1+0j)と表示される。このように普通に四則計算もできる。
複素数における関数は、実数におけるmathに対応するものとして複素数では
cmathを使う。これは、Pythonの標準ライブラリである。
import cmath; print cmath.sin(1j)とすれば、
1.17520119364jという結果を得る。
Rubyは、実地で試してみようと思ったらうちのopenSUSEにはRubyがなかったので
sudo zypper install rubyした。リポジトリから持ってこれたバージョンは1.8.7である。
require 'complex'すれば複素数が使えるようになるのだが、どうやらRuby 1.9では、
Complexクラスがbuilt-inになるようだ。
require 'complex'; print Complex::I*Complex::I;の結果は、
-1+0iとなる。ここで、
Complex::Iは虚数単位である。
複素数の関数計算は、
require 'cmath'すれば、
Cmathモジュールで行えるようになる……はずなのだが、どうやら1.8系列にはこのモジュールはないらしい。math.rbすら入っていないし……どういうことなの。
PHPの場合は需要がない? のか、そんなライブラリはないようだ。かろうじて見つけたのが
これと
これ。
Javaの場合、標準ライブラリには入っていない。
Jakarta Commonsにはあるらしいのだが……VBやC#の場合、.NET Framework 4.0には
Complex構造体があるらしい。私が以前練習で作った
関数電卓の場合は.NET 2.0で作ってたのでそんなものはなかった。
C言語だったら最近のバージョンはcomplex.hを使えばいい。
HSPにはそんなものはなかったので、
作った。