rosettacode.org からコードをコピーして実行してみる。
$ dmd roots_of_unity.d
$ ./roots_of_unity
#1: [1.000+0.000i]
#2: [-1.000-0.000i, 1.000+0.000i]
#3: [-0.500+0.866i, -0.500-0.866i, 1.000+0.000i]
#4: [-0.000+1.000i, -1.000-0.000i, 0.000-1.000i, 1.000+0.000i]
#5: [0.309+0.951i, -0.809+0.588i, -0.809-0.588i, 0.309-0.951i, 1.000+0.000i]
#6: [0.500+0.866i, -0.500+0.866i, -1.000-0.000i, -0.500-0.866i, 0.500-0.866i, 1.000+0.000i]
#7: [0.623+0.782i, -0.223+0.975i, -0.901+0.434i, -0.901-0.434i, -0.223-0.975i, 0.623-0.782i, 1.000+0.000i]
#8: [0.707+0.707i, -0.000+1.000i, -0.707+0.707i, -1.000-0.000i, -0.707-0.707i, 0.000-1.000i, 0.707-0.707i, 1.000+0.000i]
std.range を import して iota を利用し、
auto nthRoots(in int n) pure nothrow {
return n.iota.map!(k => expi(PI * 2 * (k+1)/n));
}
で計算する。
https://en.wikipedia.org/wiki/Root_of_unity にある図は、上の #5 である。
0 件のコメント:
コメントを投稿