以前にrustの三角関数が衝撃的過ぎる!っていう話をしました。
多くの他の言語だと、sin(x)と書けるところが、rustだとx.sin()と書きます。
今回は、多くの他の言語と同じようにsin(x)と書けるように自分用のsin()のラッパーを作りましょう。
rust三角関数のラッパーづくり
では、関数作っていきましょ。
ひとまず基本的な3つ、sin,cos,tan。
基本の仕上がり目標
出来上がりの目標は、x.sin()をmy_sin(x)にしていきます。cos,tanも同様に変換します。
sin()正弦
fn my_sin(x: f32) -> f32 {
return x.sin();
}
cos()余弦
fn my_cos(x: f32) -> f32 {
return x.cos();
}
tan()正接
fn my_tan(x: f32) -> f32 {
return x.tan();
}
これで完成です。簡単ですね。
では、さらにちょっと工夫してみましょう。
発展形
では、発展していきましょう。
計算するときに\(Asin(x)\)を計算する場面があると思います。
これをコードにすると
A*x.sin();//標準の方法
A*my_sin(x);//自作のラッパー
となります。
けど、これをmy_sin(A,x)って書けたらどうでしょう?
ではこれを作ってみましょう
fn my_sin(a:f32,x:f32)->f32{
return a*x.sin();
}
fn my_cos(a:f32,x:f32)->f32{
return a*x.cos();
}
fn my_tan(a:f32,x:f32)->f32{
return a*x.tan();
}
完成!
まとめ
元々ある関数を自分が買いやすいように違う関数にしてみたり、あとはマクロを組んでみたりするとより一層、プログラミングが楽になります。
「標準だと使いづらいな。」とか「このプログラムだとこういう特殊な使い方をする関数が欲しいな」とか思ったら、是非自分で自作関数にしてみたらいかがでしょうか?
コメント
[…] ここで出てきているmy_sinとmy_cosは、rustの三角関数を自分用にカスタマイズするで解説しています。 […]