なぜ整数とプロセッサにフローティングが必要なのですか?ありがとうございます
7 に答える
整数はカウント用、浮動小数点数は計算用です。両方とも数学にあるので (それぞれ整数と実数と呼ばれます)、アルゴリズムにもプログラムにも必要です。話の終わり。
確かに、ほとんどの fp 数値の実装の範囲は、ほとんどの整数の実装の範囲よりも大きいですが、明日、512 ビットの整数を許可し、16 ビットの浮動小数点数 (1 符号ビット、3 指数ビット) のみを許可する言語を発明できます。 、12 仮数ビット)。整数はまだ除算で閉じられておらず、浮動小数点数はカウントにはまだ使用されていません。なぜなら、fp 数には後継関数がありますが、実数には存在せず、fp 数は実数。
いいえ、プロセッサでは整数は簡単ではありません。プロセッサはビットに対して基本的なブール論理演算を行います。また、プロセッサ X1 が fp 演算よりも高速に整数演算を実行する場合、メモリ バンクをトロールすると反例が見つかります。
分数に fp 数さえ必要ありません。整数のペアを使用して分子と分母を表すことができます。
整数の絶対精度は、整数をカウントに使用する理由です。すべての実用的な目的では、既存の fp 実装の精度で十分です (現在、意見の相違を引き寄せる野蛮な主張があります!)
よろしく
マーク
これらはすべて単なる数字なので、区別する必要はないと思うかもしれません。ただし、多くの言語では、整数演算を実行するときに最適化が可能です。CPU命令を使用すると、加算、減算、乗算、除算が可能です。同様に、浮動小数点数に対して同様の操作を行う命令がありますが、マシンでは数値の表現が異なり、操作も異なるため、プロセッサで明らかな整数と浮動小数点の区別を次のようにバブルするのは理にかなっています。プログラミング言語自体。
C#、Java、C ++、およびその他の言語はすべて、整数と浮動小数点数を処理するための異なるタイプを持っています。Javascriptは反対の選択をします-特別な整数型はありません、そして私が間違っていなければ、すべての数字は浮動小数点数です。
intとfloatが必要な理由については、floatを使用すると、はるかに広い範囲の値を使用できますが、極端な場合(たとえば、天文学的な量)では精度が低下します。1.37999933247474x10e24を浮動小数点演算で正確に表すことはできません。一方、intは、固定された数値のセットに対して精度と速度を提供します。
整数はプロセッサリソースでより簡単で、多くの場合より高速です。これは、プロセッサに浮動小数点機能が組み込まれていなかった何年も前の大きな問題でした。今はそれほど多くはありませんが、タイトなコードでは違いが依然として重要になる可能性があります。
多くの場合、必要なのは整数だけです。
整数は、プログラミング タスクで使用する最も一般的なものです。それらはメモリアドレスを表すことができます。1 つの整数から次の整数まで数えるのは簡単です。1 つ足すだけです。
浮動小数点値は、実数を近似するために使用されます。実数は、連続数学で最も一般的な種類のものです。実世界を表現するために連続演算が使用されます。(したがって、用語は「実数」です。)
通常、浮動小数点値は整数として使用できません。X から X より大きい次の数まで簡単に数えることはできません。それらは四捨五入され、X + 1 が X とは異なる数でさえあるという保証はありません。一般的に言えば、2 つの浮動小数点数は、式が等しいと想定されている場合でも、異なる一連の操作によって生成されました。
実生活のように、浮動小数点数は予測できません。整数は、コンピューターのように順序付けられ、効率的です。
浮動小数点値は、整数より [はるかに] 広い範囲を持ちます。また、小数値を表すこともできます。ただし、これらの機能は、精度が失われるという代償を払って提供されます。
編集:(精度の損失とはどういう意味ですか)
整数演算は、オーバーフローまたはゼロ除算を引き起こすオペランドを提供しない限り、常に正確です。
これは浮動小数点演算では当てはまりません。単純な操作でそのような値を使用すると、値の一部が失われる可能性があります。この理由は、浮動小数点値によって提供される膨大な範囲が、(比較的) 小さいストレージ (通常は 8 または 16 バイト) を考えると、範囲内のすべての連続する値を表すことが不可能であるためです。
ほとんどのアプリケーションでは、どの範囲の値をどの精度で表現する必要があるかを慎重に定義し、適切な倍率で乗算することにより、浮動小数点数を整数に置き換えることができます。ただし、これは追加の開発作業であり、使用可能な時間内に浮動小数点演算の計算を実行できない小さな組み込みプラットフォーム (つまり、小さなマイクロコントローラー) でのみ価値があります。
浮動小数点数を使用すると、使用可能な範囲と精度内にとどまっている限り、ほとんどの場合、値の表現について考える必要がなくなります。残念ながら、安全な領域を離れたときに気付かない可能性があるため、これはかなり危険です。
少し異なる視点: 整数はデジタル量に役立ちますが、浮動小数点数はアナログ量に役立ちます。たとえば、港でボートを見ているときに、int を使用してボートを数え、float を使用して水位を表します。