質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2604閲覧

mathでの三角関数について

Fantastic_baby

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/09/30 23:05

mathで三角関数を扱っているのですが、
math.cos(math.radians(90))
math.sin(math.radians(180))
を出力すると、

6.123233995736766e-17
1.2246467991473532e-16と計算されてしまいます。

ラジアン関数からπ / 2などに変換しても同様でした。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2020/09/30 23:18

> よろしくお願いします。 何をですか?
Fantastic_baby

2020/09/30 23:21

回答ありがとうございます。 sinとcosの値がが異なるので、解決方法を探しています。 言葉足らずですいません。
Fantastic_baby

2020/09/30 23:22

実際の値とがという意味です。 sin180 = 0 cos90 = 0となりますよね?
ozwk

2020/09/30 23:23

e-17の意味はわかりますか?
Fantastic_baby

2020/09/30 23:27

10 ** -17という意味でしょうか? 限りなく0に近いということはわかりますが、なぜ、0.0にならないでしょうか?
guest

回答2

0

ozwkさんが言っているようにπが無理数なので正確な計算ができません。
なのでcos90°=0.0, sin180°=0.0としたい場合は、round()を使って桁数を丸めるなど工夫が必要になります。

python

1import math 2from math import cos, radians 3 4cos90 = math.cos(math.radians(90)) 5sin180 = math.sin(math.radians(180)) 6print(cos90, sin180) # -> 6.123233995736766e-17 1.2246467991473532e-16 7print(cos90 == sin180) # -> False 8 9cos90_rd = round(cos90, 6) 10sin180_rd = round(sin180, 6) 11print(cos90_rd, sin180_rd) # -> 0.0 0.0 12print(cos90_rd == sin180_rd) # -> True 13

投稿2020/10/01 00:38

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

πは小数点以下が無限に続く数字です。
そんなものを(浮動小数点数として)コンピュータで扱えないので、
実際のところ厳密なπではなく、近似値を渡してます。なのでこの時点でズレてます。

sinの実装がπに最も近い近似値を渡したら0を返すようになっていればよかったのでしょうが
実行結果からして残念ながらそうはなっていないようです。

投稿2020/09/30 23:47

編集2020/10/01 00:00
ozwk

総合スコア13553

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問