一般的なプログラミング:10進数、フロート
-
18-09-2019 - |
質問
私はおそらく完全に間違っているでしょうし、それについては何も知りませんが、プログラミング言語の小数データ型について質問があります。フロートは完全に正確ではないことを理解しています。なぜなら、それらはパワーなどでバイナリに保存されているからですが、小数点以下のデータ型が小数点がないかのように数字を保存しないのはなぜだといつも思っていました。小数がない場合は、後に追加します。この状況のように:
2.159 * 3.507 --> 2159 * 3507 = 7571613
^^^ ^^^
123 456
6 decimals in total... 7571613 -> 7.571613
^^^^^^
654321
したがって、2.159 * 3.507 = 7.571613
なぜそのように機能するのですか?
解決
それはまさに彼らがしていることです。浮動小数点数は指数形式で保存されます。小数ベースのコンピューターに取り組んでいると仮定して、これらすべての数値をバイナリに変更する必要はありません。
あなたは増殖しています 2.159 * 3.507
, 、しかし実際には 2.159
として保存されます 2159 * 10^-3
と 3.507
として保存されます 3507 * 10^-3
. 。小数ベースのシステムに取り組んでいるため、 10
想定されているので、私たちは本当に保存する必要があります -3
なしで 10
, 、 このような: 2159,-3
また 3507,-3
. 。 -3
「フローティングポイント」の位置です。ポイントが移動すると、浮動小数点が減少します(.3507
として保存されます 3507,-4
)そして、ポイントが右に移動すると、フローティングポイントが増加します(35.07
として保存されます 3507,-2
).
2つを掛けると、小数点以下の数字(またはバイナリコンピューターのバイナリ番号)が乗算される唯一のものです。 フローティングポイントが追加されます! 舞台裏で何が起こるかは次のとおりです。
2.159 * 3.507
2159,-3 * 3507,-3
2159 * 3507,-3 + -3
7571613,-6
7571613,-6
ただです 7571613 * 10^-6
(私たちはと仮定できることを忘れないでください 10
小数点以下のコンピューターで作業しているからです) 7.571613
.
もちろん、フローティングポイントは -3
, 、それはストレージに収まるものかもしれません:
21590 * .3507
2159,1 * 3507,-4
2159 * 3507,1 + -4
7571613,-3
7571.613
そしてもちろん、ほとんどのコンピューターは10進数で物を保存しないため、実際の数字はすべてバイナリになり、浮動ポイントは次のようなものになります 2^-9 -> -9
それよりも 10^-3 -> -3
. 。しかし、あなたはアイデアを得ます。
他のヒント
これは「」と呼ばれています固定点算術「人々はいつもそれをします。