- PR -

[基礎]固定小数と浮動小数について

投稿者投稿内容
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-13 13:12
引用:

りばぁさんより:

毎回ちゃんと指摘しているのですが、読んでいただけてないだけでは?
今回のも、投稿日時: 2004-02-13 11:41
で説明しているのですが・・・


この様な感じで、ご指摘を頂きたいのです。

>投稿日時: 2004-02-13 11:41で説明しているのですが・・・

私の見解の2番(内部は整数で保持し、利用時に10の累乗で計算する方式)
に関する技術文書と認識しました。

ですが、
1番の固定小数点と3番の浮動小数点について記述されておりませんし、
2番の方式について、計算誤差がでる事は記述されておりません。

>変数に代入する時点では、どんな型でも誤差は出ませんよ?

 この定義に対し、違うと考えます。
 1番の「固定小数点」と3番の「浮動小数点」では、近似値しか出来ません。
 
 10進数の0.1を
 2進数で表すと 0.0001100110011... となります。

 誤差が出来ます。

>計算する時にはどんな型を使っても誤差が出る可能性はあります。

 1番の「固定小数点」と3番の「浮動小数点」は、計算の要素値自体が
 近似値である可能性がある為、理解出来ますが、

 2番の方式で誤差がでる計算式を1つ提示して見てください。

# 編集-追記

 ぢゃん♪さんと被っている。しかも例題値が一緒 ^^;
 しかも、その後に
 unibon さんから可能との御答えが、、、


[ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-13 13:16 ]
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-13 13:25
引用:

はにまるさんの書き込み (2004-02-13 13:12) より:

 2番の方式で誤差がでる計算式を1つ提示して見てください。

# 編集-追記

 ぢゃん♪さんと被っている。しかも例題値が一緒 ^^;
 しかも、その後に
 unibon さんから可能との御答えが、、、


[ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-13 13:16 ]



まず、ぼくが、「勘違いしている」と指摘している意味から分かっていただく
必要があるようですね。

MSDNの内容をよく読んでいただきたいですが、はにまるさんのおっしゃっているのは、
プログラムの内部で値をどういうふうに持っているかということです。

つまり、浮動小数と固定小数の違いは、NAL-6295さんがおっしゃっている、

引用:

浮動小数点と固定少数点の差は、この位取りが

固定されているか浮動(不定)か

の違いです。



だけなんです。

なので、1〜3で挙げられていることと、小数の計算時に誤差が発生すること
はまったく関係ないということを分かって欲しかったのですが。

※まずここまでで切りますが、他の方の意見やはにまるさんの考えを
お聞かせください・・

※「浮動小数と固定小数の違い」についてのスレッドですから、本来、
誤差の話自体が関係ないと思いますが^^;
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-02-13 13:28
VB6.0は内部でVariantなのかなぁ・・・?
コード:

Dim dblX As Double

dblX = 0.00001
dblX = dblX * 100000
MsgBox dblX


で、結果は1が返ってきちゃうなぁ・・・。
Microsoftめ・・・また内部で何かやってるな。。。

まぁ、僕自身がCのコードを実際に打って確認してないんで、どなたか確認していただけると
収束できると思いますが・・・。

[ メッセージ編集済み 編集者: るぱん 編集日時 2004-02-13 13:31 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-13 13:30
ども、ほむらです。
------
はにまる氏へ
引用:

とすると、

「内部は整数で保持し、利用時に10の累乗で計算する方式」は、
固定小数点表記 とは言わない方が良いですね!

これが、混乱の原因か...失礼しました ^^;

で、素朴な質問、
「内部は整数で保持し、利用時に10の累乗で計算する方式」は
一般的に何て言うのでしょう?


その前にひとつ、近すぎて忘れていると思いますが。。。
固定と浮動という前提を忘れていませんか?

>「内部は整数で保持し、利用時に10の累乗で計算する方式」は
とあった場合に利用時に何乗するのか固定で決まっていれば
固定小数点。
逆にデータとして持っていて何乗するのか計算直前にならないと確定しなければ
浮動小数点です。
小数点の位置がころころかわること、これが浮動小数点の特徴です。

#失礼、かぶりました^^;;

[ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-13 13:32 ]
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-13 13:33
るぱんさん、フォローありがとうございます。

ぼくが言いたかったことなどは、そのとおりです。
ぼくのボキャブラリーが少ないために、表現がまずかったことは
お詫びします^^;

えと、例を出せば、

コード:
Dim dblData As Double
Dim curData As Currency

dblData = 0.1
curData = 0.1



としてみて、変数の中身を見ていただければ一目瞭然と言うことですね。
(回りくどいこといわずに、こういう例題にすればよかったです・・)
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2004-02-13 13:37
るぱんです。

僕は技術者なんで、実際に書くコードが日本語の変わりになってくれるかと。(爆)
指摘する時はコードメインで。
設計ならお絵かきメインでどうでしょう?(笑)
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-13 13:41
引用:

るぱんさんの書き込み (2004-02-13 13:28) より:
VB6.0は内部でVariantなのかなぁ・・・?
コード:
Dim dblX As Double

    dblX = 0.00001
    dblX = dblX * 100000
    MsgBox dblX


で、結果は1が返ってきちゃうなぁ・・・。


誤差が累積するから顕在化するんですよ、このケースは。
ちゃちゃっとExcelのVBAで作ってみました。
コード:
Sub test()
    Dim d As Double
    d = 0#
    Dim i As Integer
    For i = 1 To 10000
        d = d + 0.0001
    Next
    Debug.Print d
End Sub


結果は、0.999999999999906です。
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-13 13:51
引用:

りばぁさんの書き込み (2004-02-13 13:25) より:
まず、ぼくが、「勘違いしている」と指摘している意味から分かっていただく
必要があるようですね。


そうです!そこが重要なんです!意見が食い違っている場合、
前提条件が異なっている事もありますし、
私の知識が間違っているのであれば、それを訂正する知識が欲しいのです。

結果として、りばぁさんの意見、理解出来ました。 
今回は互いの前提条件が異なっている事が問題でしたね...
ご苦労をおかけ致します。

引用:

※「浮動小数と固定小数の違い」についてのスレッドですから、本来、
誤差の話自体が関係ないと思いますが^^;


このスレッドは前スレッドのからの流れのつもりです。

強いて言えば
「型に対して誤った知識を持ち、誤った使い方を注意する」事の方が、
「内部構成の知識」より重要と私は思います。
 無論、何故、注意しなければ行けないか?をより良く理解する為にも
 内部構造の話も重要です。

 特に今回は、私の用語定義があやふやだったので、
 混乱を招いていますが。。。 ^^;

スキルアップ/キャリアアップ(JOB@IT)