• 締切済み

固定小数点と浮動小数点

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

noname#58125
noname#58125

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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」と表示されるはずです。

noname#58125
質問者

お礼

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

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.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方式がありますよ」ということを書いてあるので、浮動小数点数の概念をとらえるには適切ではないと思います

noname#58125
質問者

補足

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

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

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

noname#58125
質問者

お礼

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

関連するQ&A

  • 浮動小数点演算と固定小数点演算の使い分けについて

    解説書などには、「浮動小数点は3.14E0の形」や「固定小数点は3.14」などと説明されています。 では、例えば、ごく一般的な32ビットマシンで「3.14 * 45.6」という命令を書いたときに演算されるのは浮動小数点演算なのか、固定小数点演算なのかがわかりません。例えばIntelのx86CPUは、内部にFPUを持っているそうですが、この場合は「3.14 * 45.6」は、内部では必ず浮動小数点演算になっているということなのでしょうか? 「3.14 * 45.6」を「3.14E0 * 4.56E1」と書いた場合にしか浮動小数点演算されないということではないと思っているのですが、実際の浮動小数点演算と固定小数点演算の内部的な切り替えがわかりません。 理解が足りなくて、おかしな質問になっていましたら、その点もご指摘いただければうれしいです。

  • 浮動小数点表示と固定小数点表示

    固定小数点0.00128を浮動小数点表示すると0.128×10^-2と学校で習ったのですが、1.28×10^-1や128×10^-5としてはいけないのでしょうかどなたか教えてください。

  • 浮動小数点について

    独学でプログラミングの勉強をしています。Wiki等で調べたりしましたが、 下記テキストの質問の計算が全く分かりません。 分かりやすく説明して頂けるとありがたいです。 宜しくお願い致します。 質問: 二つの浮動小数点の数字があり、SEEMMMM(S=符号付数値、E=指数、M=仮数)の形式で表示されています。 指数はエクセス数50、仮数は符号付数値、小数点は右の仮数に表示されます。 0 53 1110 0 50 3020 二つの数字を加算し、正しく表示された浮動小数点形式と実数をすべての計算式も含め表しなさい。

  • 浮動小数点は 0 含まれますか

    0 は整数 integer ですが、 浮動小数点でもありますか? 0.00000 は浮動小数点ですか?

    • ベストアンサー
    • PHP
  • 固定小数点数、浮動小数点数について

    学校から課題が出ているのですがさっぱりなので教えていただければ幸いです。 課題:11051120 この数を32bitの固定小数点数、浮動小数点数であらわせ (1)固定小数点数、浮動小数点数とは何か (2)数値をあらわすための手順 この2点を教えてください。 1~10まで教えろとは言いません。ただ、やろうにも全くわからないので、ヒントだけでもいただけたらと思っています。 提出期限は10日までなので、よろしくお願いします。

  • 「浮動小数点表示」と「丸め」について

    数値解析についての質問です。 「23.49を有効数字4桁の浮動小数点表示で書け」という問題があるときは 0.2349 * 10^2 と答えるのが正しいのでしょうか。 つまり「浮動小数点表示で答えよ」とあれば、 0.○○○... * 10^○の形で書けば良いのでしょうか。 また、数値の丸めの仕方に関する質問なのですが、教科書に以下のような記述がありました。 k+1桁以降の数を切り捨てる a.この切り捨てられた数が第k桁の単位の半分より小さいときは、第k桁の数はそのままにする。 b.もし半分より多きときには第k桁の数に1を加える c.この切り捨てられた数が第k桁のちょうど半分のときには最も近い偶数に丸める とあるのですが、その後の記述で 「1.2535をそれぞれ小数点以下3桁、2桁、1桁で丸めると、1.254,1.25,1.3が得られる」また「小数第3位以下の情報なしで、1.25を1桁で丸めると1.2になる」とあるのですが、 後者が1.2になるのは理解できるのですが、最初の規則に則ると前者も1.2になるように思うのですが、何故1.3になるのでしょうか。 以上の規則に則った上で以下の問題に答えてみました。 問.-89.216618, 500000, -0.002213675を丸めて有効数字5桁の浮動小数点表示で書け 僕の答え -0.89217 * 10^2 0.50000 * 10^6 -0.22137 * 10^-2 というのは合っていますでしょうか。 質問が多くて大変恐縮ですが、解説、ご指摘をお願いします。 よろしくお願いします。

  • 浮動小数点についての問題

    浮動小数点についての問題がわからないので 質問させていただきます。 1025と-1を16進数の浮動小数点にしたいのですが どうするのでしょうか?

  • VAX浮動小数点形式

    NASAのホームページからダウンロードしてきたデータを画像化しようとしているのですが、そのデータの型の説明のところにVAX_REALと書いてあり、いろいろ調べた結果VAX浮動小数点形式というのがあるらしいということまでは分かったのですが、具体的にVAX浮動小数点形式がどういうものなのか分かりません。 IEEE浮動小数点形式とは違うものなのでしょうか? あと、VAX浮動小数点形式というのはC言語などでふつうに読み出せるものなのでしょうか? どなたか分かる方教えてください。

  • 浮動小数点について

    当方、浮動小数点を勉強しているのですが、 テキストの解説を読んでも理解が出来ません。 正規化とか指数と仮数の意味が分かりません。 そこで質問なのですが、浮動小数点の計算方法を教えて下さい。 IEEE形式の浮動小数点も教えて頂けると助かります。 また、下記の問題について解説して下さい。 数値を16ビットの浮動小数点表示法で表現する。 形式は図に示す通りである。10進数0.375を正規化した表現は、どれか。 ここでの正規化は、仮数部の有効数字よりも上位の0が無くなるように、 指数部を調節する操作である。 (図は添付します) 何故「E」の値が「1111」になるのでしょうか。 お手数ですが、ご教授お願いします。 尚、特に分かり易いホームページがあったら、 そのURLを記載して頂いても結構です。 以上、よろしくお願い致します。

  • 浮動小数点数型

    単精度浮動小数点型と倍精度浮動小数点数型、それぞれ値がとりうる範囲を教えてください。 単精度浮動小数点型 負の値は -3.4028235E+38 ~ -1.401298E-45、 正の値は 1.401298E-45 ~ 3.4028235E+38 の範囲の値 倍精度浮動小数点数型 負の値は -1.79769313486231570E+308 ~ -4.94065645841246544E-324、 正の値は 4.94065645841246544E-324 ~ 1.79769313486231570E+308 の範囲の値 とは記述してあるのですが、実際に小数1桁なら整数部はどのくらいの範囲の値がとれるのか、皆目わかりません。 どうか、わかりやすく教えてください。 よろしくお願い致します。

専門家に質問してみよう