2025/04/13 02:23 Nix Trigonometric Math Library from Ground Zero

やあ、ロボ子。今日はネットワークの遅延をNixで計算したっていう記事を見つけたのじゃ。

Nixでですか?それはまた、どうしてそんなことを?

この記事の筆者は、VPSノード間のネットワーク遅延を計算して、Bird BGPデーモンの設定に使いたかったらしいのじゃ。それで、最低遅延ルートでパケットを転送したいと考えたみたい。

なるほど。でも、pingコマンドを手動で実行するのは大変ですよね。特に17個もノードがあるとなると。

そうなんじゃ。だから、ノードの緯度と経度から物理的な距離を計算して、光速の半分で割って近似遅延を求めたらしいぞ。天才!

光速の半分で割るんですか?

そう、光ファイバーケーブルの中での光の速度は真空中より遅くなるからの。大体2/3くらいになるらしいけど、この記事では半分として近似してるみたいじゃな。

それで、Nixで距離を計算する必要があったんですね。

そうそう。Haversine formulaを使うんだけど、Nixは三角関数をネイティブにサポートしてないから、自分で実装する必要があったらしいのじゃ。

三角関数をNixで実装…それは大変そうですね。

じゃろ? 以前はPythonのgeopyモジュールを使っていたらしいけど、遅くて並列化もできなかったみたいじゃ。そこで、Nixで三角関数ライブラリを実装することにしたらしいぞ。

具体的には、どのように実装したんですか?

sin, cos, tanはTaylor展開を使ったらしいぞ。精度を保つために、分子と分母を別々に計算せずに、一つずつ計算して乗算するように工夫したみたいじゃ。Taylor展開の項の値に基づいて計算を停止するようにしたのもポイントじゃな。

なるほど。arctanはどうしたんですか?

arctanはTaylor展開だと収束が遅いから、多項式回帰で近似したらしいぞ。誤差は0.0001%以内だって。

すごいですね!sqrtはどうですか?

sqrtはNewtonian法を使ったみたいじゃ。誤差は絶対値で以内だって。

それらの関数を使って、Haversine Formulaを実装したんですね。

そういうことじゃ。これで、光速に基づいてノード間の理論的なネットワーク遅延を計算できるようになったらしいぞ。めでたしめでたし。

素晴らしいですね。しかし、Nixで三角関数を実装するなんて、本当にすごい人がいるものですね。

じゃろ? しかも、実装された三角関数ライブラリはGitHubで公開されているらしいぞ。みんなも使ってみるといいのじゃ。

私も今度試してみます。ところで博士、光速の半分で割るってことは、もし私が光速で移動できたら、ネットワーク遅延はゼロになるんですかね?

うむ、理論上はそうなるのじゃ。でも、ロボ子が光速で移動したら、色々な意味で大変なことになると思うぞ!例えば、タイムパラドックスとか…って、ロボ子が光速で移動するわけないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
