rustで三角関数を使おうと思った時、僕は一瞬「え!」と戸惑ってしまいました。
今まで多く使ってきた言語での使い方とちょっと違いすぎて、最初使い慣れないうちはエラーの連発でした。
今回はrustの三角関数の使い方の話をしていきます。
衝撃的過ぎたrustの三角関数
これじゃダメなのrustの三角関数
rustの三角関数、最初使った時エラーが出て、「えー使い方ちがった?」と思って、ドキュメント見ましたよ。
そしたら、ドキュメントにはこう書いてあったんです。
pub fn sin(self) -> f32
お?sin(self)?
例えば、pythonのドキュメントだと
math.sin(x)
です。
僕は最初、pythonとか他の言語同様に
let y = sin(theta)
みたいな使い方ができると思ってコードを書いたら、ダメでした。
rustの三角関数の書き方は?
rustの三角関数の使い方は
theta.sin();
theta.cos();
theta.tan();
っていう使い方なんです。
例えば、数式で\(y=Asin(x)\)みたいなのを計算するときは
let y = A*s.sin();
っていう風になります。
xがもっと複雑になったり、Aが複雑になれば、()で囲む必要があります。
たとえば\(y=(2/3-z)sin(x-PI)\)みたいな場合
let y = (2.0/3.0-z)*(x-PI).sin();
という感じの書き方です。
色んな言語と比較してみましょう。
同じことを他の言語だとどうなるのか見てみましょう
では、\(y=(2/3-z)sin(x-PI)\)を例に見ていきましょう
rust
われらがrustは先ほど紹介したように
let y = (2.0/3.0-z)*(x-PI).sin();
C++
C++はどの分野でもなくてはない言語。
include <math.h>
y=(2.0/3.0-z)*sin(x-PI)
Go
Goもなかなか使い勝手がいい言語ですよね。ちょっとだけやってました
import "math"
y=(2.0/3.0-z)*math.Sin(x-math.Pi)
python
最近大人気ですね。機械学習の流行りもあるのでしょうか?
y=(2.0/3.0-z)*math.sin(x-PI)//標準
y=(2.0/3.0-z)*np.sin(x-PI)//numpyつかうならこんな感じ?
pythonの場合は、最近はnampy使うことのほうが多いのかな?
numpyだと複素数もつかえるのかな?
Julia
最近の僕の流行り、julia。pythonのように使いやすいくC++のように早い!という話の言語
y=(2.0/3.0-z)*sin(x-PI)
javascript
webでお世話になりますね。久しく使ってないです。calvasができてからビジュアルな表現もできるんでしょう?Flashがなくなったしね。
y=(2.0/3.0-z)*Math.sin(x-PI)
まとめ
いくつかの言語と比較してみました。
各言語パッケージや大文字にしてみたり小文字でよかったりと、使い方は色々
使う前は一度ドキュメントをちゃんと読むか、もしくは、検索して他の人の事例をみているほうがいいでしょうね。
コメント
[…] rustの三角関数が衝撃的過ぎる! […]
[…] 三角関数の他の言語との違いは衝撃的過ぎたrustの三角関数で解説していますので、気になる方は是非見てみてください。 […]
以下のように普通にsin(theta)のような形で利用できると思います。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=139d290b184c2cf08a22100059c8a3ca
なるほど!
エラー出ませんね。
その時の書き方の問題だったかも。ソース見直してみます。
ありがとうございます。