SingleとDoubleで結果が違うのですが、、、

解決


のきあ  2004-05-26 13:43:16  No: 83566  IP: [192.*.*.*]

Dim PI1 as single
Dim PI2 as Double

と宣言し、それぞれを

r=5
PI1 = 3.14159
PI2 = 3.14159

label1.caption = PI1 * r ^ 2
label2.caption = PI2 * r ^ 2

と計算させたんですが、結果がSingleで宣言した計算だと少数点以下が多く
表示されて(78.5397529602051)、Doubleだと小数点以下が5桁しか表示
されませんでした(78.53975)。

どうしてなんでしょうか?ヘルプ見てもわかりません。どなた助けてください。

編集 削除
浜的サム  URL  2004-05-26 17:50:06  No: 83567  IP: [192.*.*.*]

Singleは  32Bit
Doubleは64Bit

これとデータの表現は関係ない

表現=精度ではない

Dim DDT As Double
Dim SDT As Single
DimStringdata As String
  StringData=Format(DDT,"#####.###########")
  StringDAta=Format(SDT,"#####.###########")

こんなにすればともに同じ桁表示するが精度はもちろん
Doubleがより真値に近い。

Single は不正確。せいせい5桁までしか信用できない。

どちらでも  小数点10桁表示しようとすれば表示します。

表示をシステムに任せると、ちょうどきりのいいところで表示をとめる。

Singlede計算すると割り切れないので長々と表示するとしても

精度は5−6桁 Doubleは約10桁

Doubleで計算して、精度上きりがよければ5桁までしか出ない場合もある。

元来、Double  64Bit  指数部  8  Bit{桁Bit}  仮数部  (64−8)ビット

Single      32Bit  指数部  8  仮数部(32−8)Bit

マシンやOSにより  8が12になったりするばあいもある!
この場合、Doubleが精度を若干犠牲にして大きな桁  10の何桁
を表せる。

編集 削除
のきあ  2004-05-27 08:44:59  No: 83568  IP: [192.*.*.*]

ありがとうございました。

ほんとにたすかりました。しらなかったです。
OSのバージョンや種類によっても変わるなんて、、、
知らないことっていっぱいあるんだなってきづきました。

ほんとうにありがとうございました。

編集 削除
のきあ  2004-05-27 08:46:53  No: 83569  IP: [192.*.*.*]

すいません。解決しました。

編集 削除