2007-10-01から1ヶ月間の記事一覧

複素数(9)

純虚数の場合 引数が純虚数だと速くなる可能性があるので、 それ用にも書いてみる。 ここまでは一価だからやさしい。 log 虚部は[-π, π]だから、 sqrt 符号はyの正負による。 acos 実部が[0, π]だから、-を取る。 asin 実部が[-π/2, π/2]だから、 -を取ると…

複素数(8)

べき乗 powの値域は非常に複雑。 だが、log zは2πiの周期を持つから、alog zは2πaiの周期になる。 aによって3種類に分かれる。 1)aが整数の場合 一価関数となる。 2)aが整数でない有理数の場合 a = m / nと表すと(m, nは互いに素、n > 0)、 n価関数となる…

複素数(7)

atan より、 ただし、logが2π周期だから、 値は、実数がπ周期。C99では、http://docs.hp.com/ja/B2355-60104-06/catan.3M.html値域は、[-π/2, π/2]。 素直に計算すればよい。 import std.cstream; import std.math;void main(char[][] args) { dout.writefln…

複素数(6)

acos をzとおくと、eiZの2次方程式となり、 これを解くと、 より、 ただし、logが2π周期で、頭に±がついている。 主値は、C++では定義されていない? C99ではあるらしい。http://docs.hp.com/ja/B2355-60104-06/cacos.3M.html値域は、実部が[0, π]だというこ…

複素数(5)

atan2 前回のlogで、 log(-1+0i); // 0+3.14159i log(-1-0.0i); // 0+3.14159iとなる。これは、atan2が次のようになるためである。 atan2(0.0, -1); // 3.14159 atan2(-0.0, -1); // -3.14159 sqrt z = reiθ とすると、 sqrt(z) = sqrt(r)eiθ/2 となる。 主…

複素数(4)

対数関数 指数関数の逆関数だから、 とおいて、 atan2は便宜的に使った。 だから、 ところが、atan2は周期2πの多価関数だから、logも同様となる。 例えば、を考えると、 となるが、同時に、 となるため、は多価関数である。 プログラムとして、 返り値が複数…

複素数(3)

三角関数 三角関数は指数関数とは姉妹のようなものである。 オイラーの公式より、 これらから、 z = x + iy を代入して、 sin, tanは、 これらより、 import std.cstream; import std.math;void main(char[][] args) { cdouble c = 1 + 0.1i; dout.writefln(…

複素数(2)

指数関数 これはやさしい。 オイラーの公式、 より、 import std.cstream; import std.math;void main(char[][] args) { cdouble c = 1 + 0.1i; dout.writefln(exp(c)); // 2.7047+0.271375i }cdouble exp(cdouble c) { double im = c.im; return std.math.e…

複素数(1)

DではC/C++より簡単に複素数を扱える。 import std.cstream;void main(char[][] args) { cdouble c = 1 + 2i; dout.writefln(c); // 1+2i // cdouble d = 1 + i; // これはダメ cdouble d = 1 + 1i; dout.writefln(d); // 1+1i cdouble e = 1.4 + 2i; cdoubl…

Perlの代替として(12)

バッファつき入出力 こう書くと速いらしい。 import std.stream; import std.cstream; import std.conv;import std.date; import std.process;void main(char[][] args) { d_time starttime = getUTCtime(); long sum = 0L; Stream istream = new BufferedFi…