><https://twitter.com/orange_in_spacehttps://pawoo.net/@orange_in_space
同じことをx86(386(387)/AMD64)のアセンブラで出来たらもっと楽しそう><
精度はへなちょこだけど、CPU/FPUの専用命令にも標準ライブラリの出来合いの完成品の関数にも頼らずに三角関数計算出来ちゃった><
なんか、C#で実装した時と結果的に同じものが出来てるけど、CILで全部自前で書くと、満足感が全然違うというか「一応ちゃんと自分で作れた!><;」感がすごい><
11まで増やしたら(テイラー展開5段?)、Sin(4.2)が、 -0.890295694927415 になった><Google電卓では、-0.87157577241なのでだいぶ違う><;
C#版も同じ数字になったからバグってないっぽい!!!!!><
C#版で試して同じか見てみればいいのか・・・><
この段階で、Sin(4.2)をしたら-1.83125712って返ってきたけど、もちろん精度とても低いけどこの時点ではバグってるんだろうかバグってないんだろうか?><;
こんな風に増やしていけばおk?><;
コードはこんな感じ><(PowとFactorialの中身はさっき貼ったスクショを見てほしい><)
CILで自前でサイン計算するやつ一応出来た!!!><(まだ1段階(?)しかテイラー展開してないので、小さい数値限定だけど><;)
ちょっと不格好だけどCILで階乗書けた><;
コンパイルして中身見るようなズルをせずに直接CILで記述することに意義がある><(実用性は全く無い)
あとは、整数の階乗も書けば、ほぼ三角関数自前計算が出来るはず・・・><
なんか無駄がある気がするけど、一応Pow(double x, int y)をCILで書けた><;
・・・よく考えたら、テイラー展開の為であれば、実数乗は不要?><;
CPUやFPUがやってくれてる事をわざわざ自分で実装しようとすると、ものすごく数学の知識が要求されるんだってあらためて痛感><;
とんでもなく難しい・・・><
これはさすがに答え見る方がいい?><;
MSIL(CIL)で三角関数を計算するやつ完全自作しようとして、Math.Pow()相当をMSILで自作しようとして「・・・あれ?><; 実数の実数乗ってどうやったら加減乗除だけで計算できるんだろ?><;」ってなって、まだ知識足りな過ぎて無理だってなった><;
日本から帰国した後にスーパーで寿司を見た時のアメリカ人の反応が面白い「日本から戻ってきて2週間逆カルチャーショックで泣いた」 - Togetter https://togetter.com/li/2358774
思考の /dev/null