マシンの目の中の小数点
4939 ワード
前言
この文章は最近勉強している小数点以下の部分について書きたいです.本稿では初めてhttps://segmentfault.com/a/11...
A:what小数、何の鬼?B:私は大数を研究しましたが、その小数点を言っていますか?
あなたは聞き間違えていません.小数点以下です.0.1、0.75、1.5のような小数点で、小さい整数ではないですよ.
小数点以下の問題について
小数についてどのぐらい知っていますか?まず小数点以下の演算文をください.
不思議な文字列を説明します.
この文字列の由来を説明するには、手間がかかります.ドナー、スイカの種、ベンチを用意しましたか?(長い警告)これを見ても飽きられないということを考えてください.なぜこのような文字列なのか、丁寧にとります.次のステップに分けて、この文字列の由来を説明します.上記の問題におけるJavaScript文の機能 情報はコンピュータにどのように記憶されていますか? 小数点はコンピュータにどのように格納されていますか? 小数点はJavaScriptにおいてどのように表していますか? この文の結果の分析 じゃ、私達は徐々に来ます.
ステートメント機能
私達の文はNumber(0.1).toString(2)です.この複合文を分解します.
データの表示
コンピュータにおける情報表示
コンピュータ内部の実装:近代的なコンピュータ内部では、すべての情報(図、音声、文字列、数値など)は、バイナリ値で表されています.二進数が情報を表す方法とその演算原理を理解しさえすれば、コンピュタにおける小数点以下の記憶を理解するにはさらに進みます.
コンピュータではバイナリを使ってデータを表します.
現実のコンピュータはどうして内部ではバイナリを使って情報を表していますか?私達は十進法にもっと慣れていますよ.どうして機械に十進法を作らせないですか?コンピュータの構成から言えば、コンピュータはすべてデジタル集積回路の電子部品から構成されています.これらの電子部品は他の部品と接続するピンがありますが、すべてのピンに直流電圧0 Vと5 Vの二つの状態しかありません.2進数はちょうど2つの状態だけで、電子部品の2つの状態を表す特性とよく一致しています.コンピュータの情報は2進数で表現するのが最も簡単で効率的です.したがって、コンピュータ処理情報の最小単位であるビットは、バイナリの1ビットに相当します.ビットの英語bitは2進数位の略語です.コンピュータでの情報処理の基本単位はバイトです.8ビットは1バイトです.ビットは最小単位で、バイトは基本単位です.したがって、10進数の1、2進数を表します.00001バイトは10進数の6、2進数:0011 0000110(Golden補正)バイトは0~2^8-1の数は2、8バイトは10進数の512、バイナリ:00001 0000バイトは0~2^16-1の2つの合計16進数を表します.簡単に要約すると、権利によって加算されます.
XX進数の間の転換についてはここでは詳しく説明しません.本稿の討論の核心問題ではありません.だから、プログラムで使う十進数はコンピュータでバイナリ数にコンパイルされて演算されます.より詳細な内容:「プログラムはどうやって走りますか?」を参照してください.中二章-データはバイナリで表します.
小数の表記法
小数点と浮動小数点の違いに関する文章は迷渡大人の文章コードの謎(四)-浮動小数点(驚きから思考まで)を参照することができます.
私達はもう一度考えてみます.十進数の整数は、より多くの二進数を使って表現することができます.小数はどうなりますか?例えば、0から1まで無限数の小数がありますが、コンピュータでは、この無限数の小数をどのように表していますか?答えはすべて表示できません.驚きの後、また頷きました.jpg
現在のプログラミング言語で広く採用されている国際標準IEEE 754で制定された浮動小数点の表示方式によると、次の3つの図は「プログラムはどうやって走りますか?」の二重精度と単精度に対応する指数と端数の長さを下図に示します.浮動小数点数表示法により、0.75を表します.
数の一意性を表すために、標準は表示の形式に対しても細かい規定をしています.図3-5の第一行のこの形式しか使えません.
上の図を見てからまだ本小節の内容が分からない場合は、下のオススメの文章を参考にしてください.浮動小数点のバイナリ表示注:この文章を見てから、この節の内容をより細かく理解することができます.コンピュータが小数点以下の計算を行う時にエラーが発生した原因注:これを見ると、より多くのコンピュータのメカニズムに関する内容が理解できます.英語があまり上手ではないです.他の学生が英語が上手であれば、IEEE 754を直接読んでください.WIKIの中の内容はIEEE 754倍の精度で64ビットの浮動小数点です.
JavaScriptの中の小数点
私達は引き続きJavaScriptの中で小数点以下の表現を探します.Annotated ECMAScript 5.1ES 6のNumberタイプの説明:
prmitive value corese ponding to a double-precision 64-bit binary format IEEE 754-2008 value
Numberタイプの元の値は、デュアル精度64ビットのバイナリフォーマットIEEE 754−2008の値に対応する.
したがって、ECMAの数はすべてIEEE 754規格を採用しており、小数点以下の表現は私達が見ている上の浮動小数点の表示と一致しています.
注意:
整数もこのように表しています.指数の部分だけが正数です.
JavaScriptデータの種類を詳しく説明します.
ここまで分析したら、この文字列はどうやって来たのか分かるはずです.
この文字列の生成
この数式を利用して、十進数の二進数文字列を生成できます.jsのツールです.科学計数法で表した十進数の浮動小数点を二進数文字列に変換します.この文章の手順を参考にしたいなら、或いは:ToString Appled to the Number Typeの基礎野:浮動小数点という文章は主に自分に浮動点を理解させたいです.数の内容ですが、多くの文章を見たら、このようなコンピュータが浮動小数点を正確に表示できないことを避けるための実用的な方法があります.便利になったら調べてください.方法1、小数を整数に変えて計算します.方法2、bignumberを利用します.
補足部分:wrapNumberのタイプについて
質問があるかもしれませんが、このwrapNumberはどんなタイプですか?Numberタイプの実例的な対象ですか?以下の文でテストします.
In a non-constructor context(i.e.without the new operator)、Number can be used to perform a type conversion.
だから、みんなはタイプ検査をする時、new構造とnew構造の違いを区別します.
似たような文章:JS魔法堂:0.1+0.2==0.3000万00004の背後にあるくそのIEEE-7054の浮動小数点を徹底的に理解し、「約」は「約」と言います.あなたのボトムラインは?JSという名前で、あなたの浮動小数点を調べてみてください.http://justjavac.com/codepuzz...http://justjavac.com/codepuzz...参考記事:IEEE 754-2008 sec-terms-and-definitions-number-valueJavaScriptの小数と大きな整数の精度が失われました.
この文章は最近勉強している小数点以下の部分について書きたいです.本稿では初めてhttps://segmentfault.com/a/11...
A:what小数、何の鬼?B:私は大数を研究しましたが、その小数点を言っていますか?
あなたは聞き間違えていません.小数点以下です.0.1、0.75、1.5のような小数点で、小さい整数ではないですよ.
小数点以下の問題について
小数についてどのぐらい知っていますか?まず小数点以下の演算文をください.
Number(0.1).toString(2)
// JavaScript ,
// "0.0001100110011001100110011001100110011001100110011001101"
もしこれが難しいなら、三歩で行って、あなたのマウスを取って、ページの上のXに移動して、左ボタンを押して、88.本文はあなたに合わないですから、不幸にしても、あなたが倒れたら、私(横目笑).不思議な文字列を説明します.
この文字列の由来を説明するには、手間がかかります.ドナー、スイカの種、ベンチを用意しましたか?(長い警告)これを見ても飽きられないということを考えてください.なぜこのような文字列なのか、丁寧にとります.次のステップに分けて、この文字列の由来を説明します.
ステートメント機能
私達の文はNumber(0.1).toString(2)です.この複合文を分解します.
let wrapNumber = Number(0.1); (1)
let binaryNumber = wrapNumber.toString(2); (2)
文(1)基本タイプの数値を0.1とし、数値タイプのコンストラクタを使ってwrapNumberに包装し、補足内容:wrapNumberのタイプについては、元の数値タイプの数値のためにいくつかの有用な方法があります.[tostring([radix])][3]方法の数値をradix送り数値オブジェクトの文字列に変換するため、このステップでは、「0.000100011001100110011001100110011001100110011001100010101010101101」は、10進数0.1の2進数表示形式を表していることが分かります.これを読めば分かります.続けて見なくてもいいです.この文字列を知るには、コンピューターでどのようにデータが表示されていますか?またどのように計算されていますか?データの表示
コンピュータにおける情報表示
コンピュータ内部の実装:近代的なコンピュータ内部では、すべての情報(図、音声、文字列、数値など)は、バイナリ値で表されています.二進数が情報を表す方法とその演算原理を理解しさえすれば、コンピュタにおける小数点以下の記憶を理解するにはさらに進みます.
コンピュータではバイナリを使ってデータを表します.
現実のコンピュータはどうして内部ではバイナリを使って情報を表していますか?私達は十進法にもっと慣れていますよ.どうして機械に十進法を作らせないですか?コンピュータの構成から言えば、コンピュータはすべてデジタル集積回路の電子部品から構成されています.これらの電子部品は他の部品と接続するピンがありますが、すべてのピンに直流電圧0 Vと5 Vの二つの状態しかありません.2進数はちょうど2つの状態だけで、電子部品の2つの状態を表す特性とよく一致しています.コンピュータの情報は2進数で表現するのが最も簡単で効率的です.したがって、コンピュータ処理情報の最小単位であるビットは、バイナリの1ビットに相当します.ビットの英語bitは2進数位の略語です.コンピュータでの情報処理の基本単位はバイトです.8ビットは1バイトです.ビットは最小単位で、バイトは基本単位です.したがって、10進数の1、2進数を表します.00001バイトは10進数の6、2進数:0011 0000110(Golden補正)バイトは0~2^8-1の数は2、8バイトは10進数の512、バイナリ:00001 0000バイトは0~2^16-1の2つの合計16進数を表します.簡単に要約すると、権利によって加算されます.
XX進数の間の転換についてはここでは詳しく説明しません.本稿の討論の核心問題ではありません.だから、プログラムで使う十進数はコンピュータでバイナリ数にコンパイルされて演算されます.より詳細な内容:「プログラムはどうやって走りますか?」を参照してください.中二章-データはバイナリで表します.
小数の表記法
小数点と浮動小数点の違いに関する文章は迷渡大人の文章コードの謎(四)-浮動小数点(驚きから思考まで)を参照することができます.
私達はもう一度考えてみます.十進数の整数は、より多くの二進数を使って表現することができます.小数はどうなりますか?例えば、0から1まで無限数の小数がありますが、コンピュータでは、この無限数の小数をどのように表していますか?答えはすべて表示できません.驚きの後、また頷きました.jpg
現在のプログラミング言語で広く採用されている国際標準IEEE 754で制定された浮動小数点の表示方式によると、次の3つの図は「プログラムはどうやって走りますか?」の二重精度と単精度に対応する指数と端数の長さを下図に示します.浮動小数点数表示法により、0.75を表します.
数の一意性を表すために、標準は表示の形式に対しても細かい規定をしています.図3-5の第一行のこの形式しか使えません.
上の図を見てからまだ本小節の内容が分からない場合は、下のオススメの文章を参考にしてください.浮動小数点のバイナリ表示注:この文章を見てから、この節の内容をより細かく理解することができます.コンピュータが小数点以下の計算を行う時にエラーが発生した原因注:これを見ると、より多くのコンピュータのメカニズムに関する内容が理解できます.英語があまり上手ではないです.他の学生が英語が上手であれば、IEEE 754を直接読んでください.WIKIの中の内容はIEEE 754倍の精度で64ビットの浮動小数点です.
JavaScriptの中の小数点
私達は引き続きJavaScriptの中で小数点以下の表現を探します.Annotated ECMAScript 5.1ES 6のNumberタイプの説明:
prmitive value corese ponding to a double-precision 64-bit binary format IEEE 754-2008 value
Numberタイプの元の値は、デュアル精度64ビットのバイナリフォーマットIEEE 754−2008の値に対応する.
したがって、ECMAの数はすべてIEEE 754規格を採用しており、小数点以下の表現は私達が見ている上の浮動小数点の表示と一致しています.
注意:
整数もこのように表しています.指数の部分だけが正数です.
JavaScriptデータの種類を詳しく説明します.
ここまで分析したら、この文字列はどうやって来たのか分かるはずです.
この文字列の生成
この数式を利用して、十進数の二進数文字列を生成できます.jsのツールです.科学計数法で表した十進数の浮動小数点を二進数文字列に変換します.この文章の手順を参考にしたいなら、或いは:ToString Appled to the Number Typeの基礎野:浮動小数点という文章は主に自分に浮動点を理解させたいです.数の内容ですが、多くの文章を見たら、このようなコンピュータが浮動小数点を正確に表示できないことを避けるための実用的な方法があります.便利になったら調べてください.方法1、小数を整数に変えて計算します.方法2、bignumberを利用します.
補足部分:wrapNumberのタイプについて
質問があるかもしれませんが、このwrapNumberはどんなタイプですか?Numberタイプの実例的な対象ですか?以下の文でテストします.
typeof wrapNumber === 'number'
Object.prototype.toString.call(wrapNumber) === "[object Number]"
Object.prototype.toString.call(0.1) === "[object Number]" //
結果は一致しており、wrapNumberは元の数値タイプですが、Numberタイプのオブジェクトではなく、単にNumberタイプの値であることが検出されます.wrapNumber instanceof Number === false
wrapNumber instanceof Object === false
wrapNumber === 0.1 //
let wrapNumberObj = new Number(0.1);
typeof wrapNumberObj === 'object'
wrapNumberObj instanceof Number === true
wrapNumberObj instanceof Object === true
Object.prototype.toString.call(wrapNumberObj) === "[object Number]"
wrapNumberObj.valueOf() === 0.1 //new
MDNにおけるNumberタイプにおけるnewなし構造に関する説明は以下の通りである.In a non-constructor context(i.e.without the new operator)、Number can be used to perform a type conversion.
だから、みんなはタイプ検査をする時、new構造とnew構造の違いを区別します.
似たような文章:JS魔法堂:0.1+0.2==0.3000万00004の背後にあるくそのIEEE-7054の浮動小数点を徹底的に理解し、「約」は「約」と言います.あなたのボトムラインは?JSという名前で、あなたの浮動小数点を調べてみてください.http://justjavac.com/codepuzz...http://justjavac.com/codepuzz...参考記事:IEEE 754-2008 sec-terms-and-definitions-number-valueJavaScriptの小数と大きな整数の精度が失われました.