[解決済み] 16331239353195370.0に特別な意味はあるのでしょうか?
質問
使用方法
import numpy as np
ということに気がつきました。
np.tan(np.pi/2)
はタイトルの数字を与えるのであって
np.inf
16331239353195370.0
この数字について興味があります。何かのシステムの機械精度パラメータと関係があるのでしょうか?私は何かからそれを計算したのでしょうか? (私は、以下のようなラインに沿って考えています。
sys.float_info
)
EDITです。 Java、octace、matlab...といった他の環境でも、確かに同じ結果が再現されます。提案されたダミーでは、その理由は説明できませんが。
どのように解決するのですか?
pi
は、Pythonのfloatとして正確に表現できるわけではありません(プラットフォームCの
double
型と同じ)。 最も近い表現可能な近似値が使用されます。
以下は、私のボックスで使用されている正確な近似値です (おそらくあなたのボックスと同じです)。
>>> import math
>>> (math.pi / 2).as_integer_ratio()
(884279719003555, 562949953421312)
その比の正接を求めるために、今からwxMaximaに切り替えます。
(%i1) fpprec: 32;
(%o1) 32
(%i2) tan(bfloat(884279719003555) / 562949953421312);
(%o2) 1.6331239353195369755967737041529b16
というわけで、本質的に同じものが得られました。 へのバイナリ近似は
pi/2
の数学的な値 ("infinite precision") よりも少し小さくなっています。
pi/2
. そのため、非常に大きな正接が得られる代わりに
infinity
. 計算された
tan()
は実際の入力に対して適切です!
全く同じ種類の理由で、例えば
>>> math.sin(math.pi)
1.2246467991473532e-16
は0を返しません。 近似値である
math.pi
よりも少し小さく
pi
であり,表示結果は正しい
となり
であり、表示される結果はその真理が正しい。
math.piの他の見方
使用されている正確な近似値を見るにはいくつかの方法があります。
>>> import math
>>> math.pi.as_integer_ratio()
(884279719003555, 281474976710656)
math.pi
は、その比率の数学的な ("infinite precision") 値に正確に等しくなります。
または16進数表記で正確な浮動小数点数として。
>>> math.pi.hex()
'0x1.921fb54442d18p+1'
あるいは、ほぼすべての人に最も容易に理解される方法で。
>>> import decimal
>>> decimal.Decimal(math.pi)
Decimal('3.141592653589793115997963468544185161590576171875')
すぐにはわからないかもしれませんが、すべての有限の2進浮動小数点は有限の10進浮動小数点として正確に表現できます(逆は
ではない
は真であり、例えば10進数の
0.1
は有限の2進浮動小数点として正確に表現できるわけではありません)、そして
Decimal(some_float)
のコンストラクタは正確に等価なものを生成します。
の真の値は以下の通りです。
pi
の正確な10進数値が続きます。
math.pi
であり、3行目のキャレットは両者が異なる最初の桁を指しています。
true 3.14159265358979323846264338327950288419716939937510...
math.pi 3.141592653589793115997963468544185161590576171875
^
math.pi
は、現在ではほとんどすべてのボックスで同じバイナリ浮動小数点フォーマット (IEEE 754 倍精度) を使用しているため、quot; almost all" ボックス全体で同じになります。 上記のいずれかの方法を使用して
あなたの
ボックスでそれを確認するか、またはボックスが例外である場合に使用されている正確な近似値を見つけるために、上記の方法のいずれかを使用できます。
関連
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] オブジェクトの現在のプロパティと値をすべて表示する組み込み関数はありますか?
-
[解決済み] リストの要素を値で削除する簡単な方法はありますか?
-
[解決済み] スレッドを強制終了させる方法はありますか?
-
[解決済み] Pytzのタイムゾーンの一覧はありますか?
-
[解決済み] 配列内の何かの最初のインデックスを返すNumPy関数はありますか?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] scipy.pi、numpy.pi、math.piのいずれかを使用する必要がありますか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] Django filter queryset __in for *every* item in list