みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

固定小数点と浮動小数点

電算機の小数点認識に固定小数点と浮動小数点というのがあると聞きました。前者は分かるのですが、浮動小数点のWikiとかの記述を見てもあまりピンときませんでした。わかりやすい説明はないでしょうか。

投稿日時 - 2008-04-05 13:24:51

QNo.3923977

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

#02です
>どこまでデータとして記憶してあるかで計算に誤差が出る気がするのですが。

その通りです。コンピュータの世界では「誤差」はつきものです。色々な種類の誤差があります。コンピュータの世界では「基本中の基本」です
http://www.geocities.jp/kmctecyh/k_text/text01/text0101/text010104.PDF

誤差の一例を紹介しましょう
エクセルのA1セル、A2セルに十進数で「4.2」と「4.3」をそれぞれ入力し、別のセルに「=A2-A1」を入力してみてください
表示は当然「0.1」となりますが、そのセルの書式を変更して小数点以下を15桁まで表示してみてください。すると「0.0999999999999996」と表示されるはずです。

投稿日時 - 2008-04-05 15:15:56

お礼

どうもまたしてもご丁寧に有難う御座います。これからは注意してデータ演算等を行なおうと思いますが、よっぽど徹底しない限りはデータの不整合はエクセルでは避けて通れない道なのでしょうね。

投稿日時 - 2008-04-05 16:01:45

ANo.2

簡単に言うと「浮動小数点数 = 指数形式で格納された数値」です。
コンピュータ内部では数値は二進数で表されますが、わかりやすいように十進数で例をあげます

「12345605」という8桁の数字の並びがあるとき、この数字列を「99999V999(9が数値、Vが小数点位置)」と定義すれば、この数字列は「12345.605」の意味になります。また「99V999999」と定義すれば「12.345605」の意味になります。
これらは固定小数点数の考え方です。(定義によって小数点の位置は変わりますが、これは「浮動小数点数」ではありません)

一方この数字列を仮数部6桁、指数部2桁と考えれば、これは
 「1.23456E05」=「1.23456×10^5」=「123456」
を意味します。(10E5と10^5は「10の五乗」の意味です)

8桁の数字列は固定小数点数のときは最大でも「99999999」=「10E8-1」までしか表現でできません。また最小の正数では「0.00000001」=「10E-8)」までになります。(負の数字はここでは考えません)

でも浮動小数点数でなら8桁の数字で、最大「9.99999E99」、最小で「10E-99」まで表現できることになります。つまり同じ文字数で表現可能な範囲が広がるのです。違いがおわかりいただけますでしょうか。

ただ上記説明は非常にデフォルメしてあります。実際のコンピュータの世界ではデータの持ち方や、負の数字の表し方などもっと複雑なのですが、その説明は割愛します。興味があれば勉強してみてください。

Wikipediaに書いてある内容は、「浮動小数点数を表す形式はIEEE方式やIBM方式がありますよ」ということを書いてあるので、浮動小数点数の概念をとらえるには適切ではないと思います

投稿日時 - 2008-04-05 14:39:48

補足

ご丁寧に有難う御座います。とても分かり易かったです。実際はいろいろ複雑な処理をしているのだろうけれども概念は理解出来ました。ただそうするとコンピュータで表現(認識?)出来る数字にはデジタル機械ですから当然限界があり、厳密な数値計算は不可能なのではないでしょうか。実生活で必要なのは、小数点2位位までですし、こだわる必要もないかもしれません。一つもし確認出来たらさせて頂きたいのですが、例えば小数点以下2位までの表示としていてもコンピューターは、浮動小数点の限界認識まで内部でとらえているのでしょうか。どこまでデータとして記憶してあるかで計算に誤差が出る気がするのですが。

投稿日時 - 2008-04-05 14:53:48

ANo.1

電算機の「数」のメモリ上(ビット)に持つ方式の2大区分で、理系バックボーンなら
(A)浮動小数点数はなじみのはず
「仮数 指数 底 奇数  真数」でWEB照会すること。
(B)それを指数部と仮数部にどう搭載するか。
ーー
まず(A)の理解。
そしてコンピュタのビット列で実現する規約(B)を調べてください。
ここで説明していたら文章が長くなって簡単には説明出来ない。
質問者は、もっとWikiの文章なりでも、わからない点を絞って質問するべきです。
ーーー
こんなところへ質問して回答を見るより、WEB照会をしたほうが、量的にも多く、信頼性も多分大きいと思う。ウイキだけ見て終るから「てもあまりピンときませんでした」となる。
そのほか、内容が付帯的な勉強をした後でないと、頭に入りにくいことも確かだ。文章だけの説明を読んでも判らないだろう。WEBで判らなければ、先生の授業を良く効くとか、そちらで質問することだ。

投稿日時 - 2008-04-05 14:12:44

お礼

imogashiさん、もう確かにその通りですね。ご丁寧にどうも有難う御座います。ネットの上でいろいろサイトはありますし、自分なりによく勉強してみようと思いますのですがエンドユーザーとそうでない人の敷居が高い気がしてます。

投稿日時 - 2008-04-05 15:52:22

あなたにオススメの質問