[解決済み] 初心者の言葉で「NaN(Not a Number)」とは何か?[クローズド]
質問内容
NaNやNumber which isn't a real Numberが何なのか、まだ理解していません。
主な質問です。
- NaN値、NaNとは具体的にどのようなものですか(非数学系の先生の言葉で)。
さらに私は、NaNが何であるべきかを理解する上で私に不満を与えている、全体の状況についていくつかの質問があります。
-
結果がNaNになる操作にはどのようなものがありますか?
-
0.0 / 0.0 の結果はなぜ未定義とされているのですか?0であるべきではないでしょうか?
-
なぜ数学の演算結果は浮動小数点数か整数で表現できないのでしょうか?ある値が表現できないのはどうしてでしょうか?
-
負の数の平方根はなぜ実数でないのか?
-
なぜNaNは不定形と同等ではないのですか?
このStack Overflowを含め、インターネット上ではNaNとは何かということを理解できる説明がありませんでした。
とにかく私は、私の質問に対する理解しやすい答えを見つけるために、すでにスキャンした場所へのリンクとして私の研究を提供したい。たとえいくつかのリンクが他のプログラミング言語で同じ質問に行くとしても、全体として私に望ましい明確な情報を与えなかった。
ウィキペディア
https://en.wikipedia.org/wiki/NaN
https://en.wikipedia.org/wiki/IEEE_754
その他
http://foldoc.org/Not-a-Number
https://www.youtube.com/watch?v=HN_UmxIVS6M
https://www.youtube.com/watch?v=9EsHjXftO7s
スタックオーバーフロー
他の言語に対する類似または同じ質問(同じでなくても、理解のベースが非常に似ていると思う限り提供します)。
IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
(文字列が有効な数値であるかどうかをチェックするJavaScriptの(組み込みの)方法
JavaScript:NaN、オブジェクト、プリミティブって何?
C++に関する質問です。
quiet NaNとsignaling NaNの違いは何ですか?
C++でdouble(またはfloat)がNaNかどうか確認する
インテル® C++ コンパイラーで NaN - NaN == 0.0 となるのはなぜですか?
いつも参考になる回答やコメントをありがとうございます。
どのように解決するのですか?
あなたはここで一連の素晴らしい質問をしました。ここでは、その一つひとつに対応していこうと思います。
<ブロッククオートNaN値、NaNとは一体何なのか(非数学部の教授の言葉)?
1, π, e, -137, 6.626 などの実数を扱うとしましょう。実数の世界では、次のような演算があります。 通常 は実行できますが、結果が定義されていないこともあります。例えば、対数について見てみましょう。例えば、ln e = 1、ln 10は約2.3というように、たくさんの実数の対数を取ることができます。しかし、数学的には、負の数の対数は定義されていない。つまり、ln (-4) をとって実数に戻すことはできない。
さて、ここでプログラミングの世界に飛び込んでみましょう。ある数の対数を計算するプログラムを書いていて、どういうわけかユーザが負の数の対数で割って欲しいと思っているとします。どうなるでしょうか?
この質問に対しては、合理的な答えがたくさんあります。Pythonのようないくつかの言語で行われているように、操作で例外をスローさせることができます。
しかし、ハードウェアのレベルでは、(IEEE-754規格を設計した人々によって)プログラマに第2の選択肢を与えることが決定されたのです。プログラムをクラッシュさせるのではなく、操作によって「あなたは私に何か不可能なことをさせたかったので、エラーを報告します」という意味の値を生成させることができるのです。
NaN
("Not a Number")で、計算のどこかで数学的に定義されていない操作を行おうとしたことを示します。
この方法にはいくつかの利点があります。多くの科学計算環境では、コードは一連の長い計算を実行し、定期的に興味のある中間結果を生成します。定義されていない演算が
NaN
その結果、プログラマーは自分の思い通りに計算を行うだけのコードを書き、そのコードの中に特定の箇所を導入して、その操作が成功したかどうかをテストすることができるのです。そこから、何をすべきかを決めることができる。例外を発生させたり、プログラムをクラッシュさせたりすると、プログラマーは失敗する可能性のある一連の浮動小数点演算をすべて保護する必要があるか、自分で手作業でテストしなければならないことになる。どちらの方が良いか判断する必要があるため、浮動小数点NaNの動作を有効または無効にすることができるのです。
結果としてNaNが発生する操作とは?
を取得する方法はたくさんあります。
NaN
の結果です。ここでは、その一部を紹介します。ただし、これは完全なリストではありません。
- 負の数の対数をとること。
- 負の数の平方根をとる。
- 無限大から無限大を引くこと。
-
に対して任意の算術演算を行う。
NaN
.
ただし、以下のような操作では
NaN
数学的に未定義であってもです。例えば、正の数を0で割ると、数学的に定義されていないにもかかわらず、結果として正の無限大が得られます。これは、正のxについて、yが正の方向から0に近づくときのx / yの極限をとると、その値は際限なく大きくなっていくからである。
0.0 / 0.0の結果が未定義と宣言されているのはなぜですか?それは0であるべきではないですか?
これは何よりも数学的な質問です。これは、限界がどのように機能するかに関係しています。0 / 0 をどのように定義するか考えてみましょう。一つの選択肢として、次のように言うことができます。「0 / x という式を見て、x が 0 に近づくと限界になる」とすると、各点で 0 が見えるので、限界は 0 になるはずです。一方、式 x / x を見て、x が 0 に近づいたときの極限を求めると、各点で 1 が見えるので、極限は 1 であるべきである。これは問題です。0 / 0 の値は、これらの式のいずれかを評価したときに得られるものと一致させたいのですが、意味のある固定値を選ぶことはできません。その結果、0 / 0の値は次のように評価されます。
NaN
これは、ここに割り当てるべき明確な値がないことを示しています。
なぜ数学の演算結果は浮動小数点数か整数で表現できないのか?どうして値が表現できないのでしょうか?
これは、IEEE-754浮動小数点数の内部構造に関係している。直感的には、これは次のような単純な事実に帰結します。
- 無限に多くの実数があり、そのうちの無限に長い非繰り返し小数を持つ実数は無限にありますが
- コンピュータのメモリは有限である。
その結果、任意の実数を格納するためには、無限に長い数字の羅列を格納することになりかねず、有限メモリのコンピュータではそれができないのです。そこで、浮動小数点数には 近似値 実数の とてつもなく巨大でないもの また、値を表現できないのは、近似値を保存しているに過ぎないからです。
実際にどのように数値が格納されているのか、これが実際に何を意味するのかについては、伝説のガイドをご覧ください。 浮動小数点演算についてプログラマが知っておくべきこと"
<ブロッククオート負の数の平方根はなぜ実数でないのか?
例えば、√(-1)を例に挙げてみましょう。これが実数x、つまりx=√(-1)であると想像してください。平方根の考え方は、それ自体を掛けると平方根を取った数が戻ってくるというものです。
では...xは何番でしょう?x≠0であることは、0だからわかる。 2 = 0は-1ではない。また、正の数の倍数は正の数なので、xは正になり得ないことも知っている。そして、私たちは また は負になりえないことがわかる。なぜなら、負の数の倍数は正になるからだ。
ここで問題が発生しました。このxが何であれ、正でもなく、ゼロでもなく、負でもないことが必要です。つまり、実数ではないのだ。
実数を複素数に一般化するには、i という数を導入します。 2 = -1. 実数にはこのようなものはないことに注意してください。
<ブロッククオートなぜNaNは不定形と等価ではないのですか?
例えば、0 / 0は不定と言われるかもしれません。0 / 0にどうアプローチするかによって、0が返ってくるか、1が返ってくるか、あるいは他の何かが返ってくるかもしれないからです。一方、√(-1)は複素数として完全に定義されています(√(-1)が-iではなくiを返すと仮定して)。したがって、問題は「不定である」ではなく、「値はあるが、その値は実数でない」なのです。
お役に立てれば幸いです。
関連
-
[解決済み] 大きな符号なし2進数から小さな2進数の引き算
-
[解決済み] 初心者の言葉で「NaN(Not a Number)」とは何か?[クローズド]
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
-
[解決済み] JavaScriptで、数値が精度を失うことなく到達できる最も高い整数値は何ですか?
-
[解決済み] JavaScriptで数値がNaNであることを確認するにはどうすればよいですか?
-
[解決済み] 2つのGPS座標間の距離を計算する
-
[解決済み】関数f(f(n))を設計する == -n
-
[解決済み】"ランダム性 "を理解する
-
[解決済み】IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
-
[解決済み] GUIDは常に一意であると仮定しても安全ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】n個のノードを持つ有向グラフの最大エッジ数は何個ですか?[クローズド]。
-
[解決済み] Latexで関数の下に文字を配置するには?
-
[解決済み] n log n = c の計算方法
-
[解決済み] glm::normalizeは何をするのですか?
-
[解決済み] tf.truncated_normalとtf.random_normalの違いは何ですか?
-
[解決済み] バイトからメガバイトへの変換
-
[解決済み] 文字列が有効な数値であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] C++でdouble(またはfloat)がNaNかどうか確認する
-
[解決済み】IEEE754のNaN値に対して、すべての比較がfalseを返す根拠は何ですか?
-
[解決済み] 複数の緯度経度座標ペアの中心点を計算する