ab.com コミュニティ
https://www.activebasic.com/forum/

リテラル値同士の演算結果
https://www.activebasic.com/forum/viewtopic.php?t=1256
ページ 11

作成者:  KICO [ 2006年7月22日(土) 18:58 ]
記事の件名:  リテラル値同士の演算結果

何時も、お世話に成っています。

 リテラル値同士の乗算演算した結果がおかしいです。(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 [ 2006年7月22日(土) 19:42 ]
記事の件名: 

無符号数値が誤って符号拡張されていますね。
明示的に型キャストすれば問題を回避できます。
コード:
a=100*328 As Double
b=100*328 As DWord
c=100*328 As Long
面倒くさいけどね。

作成者:  山本 [ 2006年7月22日(土) 20:36 ]
記事の件名: 

ご報告ありがとうございます。
こちらでも現象が確認できました。次回のバージョンアップで修正させていただきます。

作成者:  MUGI [ 2006年7月25日(火) 14:39 ]
記事の件名:  AB424サンプルのCDPlayerのTrackBarの設定について

同じ現象かと思われましたので、ぶら下がらせていただきます。
プログラミング質問板のほうで、質問立てているのですが、
サンプルの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とした場合は、正常な値となります。
このスレの現象と同じものでしょうか?
よろしくお願いします。

ページ 11 全ての表示時間は UTC+09:00 です
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/