ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
-
KICO
- 記事: 57
- 登録日時: 2005年12月13日(火) 17:42
#1
投稿記事
by KICO »
何時も、お世話に成っています。
リテラル値同士の乗算演算した結果がおかしいです。(Ver 4.24.00以降)
全て試した訳ではありませんが、最初に気が付いたのがDouble型で他にも有るのかと
試してみるとLong型,DWord型もでした。
コード: 全て選択
Dim a As Double
Dim b As DWord
Dim c As Long
'OK
a=328*100
b=328*100
c=328*100
Debug
'NG
a=100*328
b=100*328
c=100*328
Debug
題名に「リテラル値同士・・」と書きましたが、その限りで無いみたいですので、その方も確認お願いします。
宜しくお願いします。
-
tak
- 記事: 162
- 登録日時: 2005年5月31日(火) 07:49
#2
投稿記事
by tak »
無符号数値が誤って符号拡張されていますね。
明示的に型キャストすれば問題を回避できます。
コード: 全て選択
a=100*328 As Double
b=100*328 As DWord
c=100*328 As Long
面倒くさいけどね。
-
山本
- Site Admin
- 記事: 535
- 登録日時: 2005年5月30日(月) 15:08
-
連絡する:
#3
投稿記事
by 山本 »
ご報告ありがとうございます。
こちらでも現象が確認できました。次回のバージョンアップで修正させていただきます。
-
MUGI
#4
投稿記事
by MUGI »
同じ現象かと思われましたので、ぶら下がらせていただきます。
プログラミング質問板のほうで、質問立てているのですが、
サンプルのCDPlayerの中の、Sub MainWnd_PlayButton_Clickのなかで、
nMax = (MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,nMax))
で設定していますが、MessageBoxを使って調べてみると、nMaxの値が変な値になっています。
nMaxを使わず、
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,(MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10))
とすると正常に動きます。
nMax = (60 * MCI_MSF_MINUTE(msp.dwReturn) + MCI_MSF_SECOND(msp.dwReturn)) * 10とすると、問題なく動きますと教えていただきました。
しかし、nMaxを使わない場合と、MessageBoxで(MCI_MSF_MINUTE(msp.dwReturn) * 60 + MCI_MSF_SECOND(msp.dwReturn)) * 10とした場合は、正常な値となります。
このスレの現象と同じものでしょうか?
よろしくお願いします。