衝撃的過ぎたrustの三角関数

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)

まとめ

いくつかの言語と比較してみました。

各言語パッケージや大文字にしてみたり小文字でよかったりと、使い方は色々

使う前は一度ドキュメントをちゃんと読むか、もしくは、検索して他の人の事例をみているほうがいいでしょうね。

コメント

  1. […] rustの三角関数が衝撃的過ぎる! […]

  2. […] 三角関数の他の言語との違いは衝撃的過ぎたrustの三角関数で解説していますので、気になる方は是非見てみてください。 […]

  3. AnonyMous より:

    以下のように普通にsin(theta)のような形で利用できると思います。

    https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=139d290b184c2cf08a22100059c8a3ca

    • かまやん より:

      なるほど!
      エラー出ませんね。
      その時の書き方の問題だったかも。ソース見直してみます。
      ありがとうございます。

タイトルとURLをコピーしました