掛け算の制限

解決


BECK  2004-10-07 02:21:35  No: 116819

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

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

・  Msgbox  (1000  *  1000)

これを、

・  Msgbox  Cint(1000)  *  Cint(1000)

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

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

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


BECK  2004-10-07 02:24:18  No: 116820

自己レスです。

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

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

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


nanashi  2004-10-07 02:34:40  No: 116821

ヘルプは見ましたか?

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

と書かれています。

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

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


BECK  2004-10-07 04:06:00  No: 116822

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

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

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

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

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

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


魔界の仮面弁士  2004-10-07 06:01:18  No: 116823

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加