- - PR -
[基礎]固定小数と浮動小数について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-13 14:26
るぱんです。
ぢゃん♪様のおっしゃった通りになりました。(^^ ありがとうございます。 >Microsoft(違) すまん。僕が悪かった!許してくれぇぇぇぇぇぇぇぇぇ!! しかし、コメントアウトしたコードだとオーバーフローするんだ? えぇ?申し開きしてみろぉ!!!(謎) [ メッセージ編集済み 編集者: るぱん 編集日時 2004-02-13 14:28 ] | ||||||||||||
|
投稿日時: 2004-02-13 14:39
こちらこそ申し訳ありませんでした
VBの型は結構いい加減ですから、逆にきちんと知っておく必要があるかもしれませんね・・ るぱんさんへ、 コメントアウトしたところは、dblXを2倍にしていく感じですよね? それを99999回ですかぁ・・8バイトで足りますかねぇ?頭の中で計算できないので 分かりませんがTT あと、いらぬ突っ込みかと思いますが、なぜカウンタもDouble型なのですか??(笑) Double型の場合、200回くらい足せばもう誤差出ちゃいましたけど、 Currency型で同じようなことすると、何回やっても誤差でないんですよね・・ 値の持ち方を考えると、単純な足し算とかだと、誤差なしでいいのかもしれませんね。 どなたか誤差が出る例があれば教えていただきたいです・・・ [ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-13 14:42 ] | ||||||||||||
|
投稿日時: 2004-02-13 14:42
まぁ、0.00001×(2^99999) → 約4.995×(10^30097) だし | ||||||||||||
|
投稿日時: 2004-02-13 14:48
コメントアウトしたコードだと 1.79769313486231570E+308 の精度を超えるからのようですね。 ちなみに、.NETだと例外が発生せず+∞となります。 #修正:引用しすぎを修正 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-13 14:48 ] | ||||||||||||
|
投稿日時: 2004-02-13 14:54
>unibonさん
>http://www.geocities.co.jp/SiliconValley/4334/unibon/asp/valueerror.html 誤字発見! >誤差が累積することを不正でいます 少し吹いてしまいました。 >るぱんさん 以下のようにしたいという事ではっ!? Dim i As Long Dim dblTeisu As Double Dim dblX As Double dblTeisu = 0.00001 dblX = 0 For i = 1 To 100000 dblX = dblX + dblTeisu Next i ・定数っぽいのを定義 ・iはDoubleじゃない #引用間違えたので修正。 #お二人とかぶってしまった… [ メッセージ編集済み 編集者: Tomscissors 編集日時 2004-02-13 14:56 ] | ||||||||||||
|
投稿日時: 2004-02-13 14:58
C#のdouble, decimalでですが、ちょちょいと作ってみました。
を実行すると
です。 decimalといえど、誤差が累積してしまえば、若干ながら誤差が拡大してしまうようです。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-02-13 15:05 ] | ||||||||||||
|
投稿日時: 2004-02-13 15:07
仰るとおりです。 あ、そうか、単純にさっきのだと倍倍になっていくのか。 ごめんなさい。早とちりです。(汗 Doubleにしたのは途中であふれたからで、僕の意図的な正解はLongです。 もっとソース読み直さないとな。。。(滝汗 [ メッセージ編集済み 編集者: るぱん 編集日時 2004-02-13 15:13 ] | ||||||||||||
|
投稿日時: 2004-02-13 15:55
ほむらです。
-------- るぱん氏 僕も同じようなコード書いてました_| ̄|○illi 修正して確認しました。 Perlでも0.999999999999906になりますね。 後一回足す(=10001回)と1.00009999999991 になります。 #間違いに気が付いて削除 [ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-13 16:08 ] |