掛け算の制限

解決


BECK  2004-10-06 17:21:35  No: 116819  IP: [192.*.*.*]

掛け算について不思議な事があります

以下のような掛け算をした場合オーバーフローエラーと
なってしまいます。

・  Msgbox  (1000  *  1000)

これを、

・  Msgbox  Cint(1000)  *  Cint(1000)

とするとオーバーフローじゃなくなります。
自分で色々調べてみたのですが、なぜなのかわかりません。

取りあえず、2つめの方法でプログラム上は解決してるのですが
なぜなのか気になってしょうがありません。

原因をご存知の方がいましたら教えていただきたく思います。

編集 削除
BECK  2004-10-06 17:24:18  No: 116820  IP: [192.*.*.*]

自己レスです。

すいません
先程の内容が間違っていたので訂正させて頂きます

誤)Msgbox  Cint(1000)  *  Cint(1000)

正)Msgbox  CDbl(1000)  *  CDbl(1000)

編集 削除
nanashi  2004-10-06 17:34:40  No: 116821  IP: [192.*.*.*]

ヘルプは見ましたか?


  数値計算で数値が内部的に整数型として処理されている場合に、計算結果が整数型の範囲を超えています。


と書かれています。

Integer × Integer の時、内部的にはIntegerとして処理されます。
Integerの範囲は -32768 〜 32767、計算結果は1000000なので
Integerの範囲を超えている為、オーバーフローとなります。

CDblでDoubleとして扱えば範囲内に収まるのでオーバーフローしません。
別にDoubleじゃなくても、Long型でも範囲内に収まるのでオーバーフローしません。

編集 削除
BECK  2004-10-06 19:06:00  No: 116822  IP: [192.*.*.*]

nanashi様  ご回答ありがとうございます

ヘルプはもちろん見ました。

>数値計算で数値が内部的に整数型として処理されている場合に、計算結果が整数型>の範囲を超えています。

しかし、上記のようなヘルプをみつけることが出来ませんでした。
初心者質問でお恥ずかしい限りです。。。

VBは、数字をそのまま書くとintegerとして扱われるんですね、
知りませんでした。(汗

親切なご回答ほんとにありがとうございました

編集 削除
魔界の仮面弁士  2004-10-06 21:01:18  No: 116823  IP: [192.*.*.*]

> VBは、数字をそのまま書くとintegerとして扱われるんですね、

常に Integer になるわけではなく、表記にあわせて、
     12345 → Integer
  12345678 → Long
   123.456 → Double
などのように判定されます。
これらは、TypeName(12345678) などで確認できます。


なお、型を明示したい場合は、
  123%  →  Integer
  123&  →  Long
  123!  →  Sinble
  123#  →  Double
  123@  →  Currency
といった記法もあります。

編集 削除