ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2017年9月20日(水) 02:15

All times are UTC+09:00




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
 記事の件名: 指数演算の警告
投稿記事Posted: 2008年3月24日(月) 18:50 
何処に書き込むか迷いましたが、ここに。

DWordNum1 = 10 ^ DWordNum2

上記の様な指数演算にて、

[警告] DoubleからDWordに強制変換されています。データが失われる可能性があります。

と出ますが、DWord 型 とリテラル値のみの演算で上記の様な警告が出るのは、そういうものなのですか。内部の演算が Double 型で扱われている様な話は聞いていますが、プログラマーから見た場合、明らかに DWord 型 の演算なのに警告が出るのはチョット変な気がします。恐らく、DWord 型 のレベルで失われるデータは、&hFFFFFFFF を超えた場合、0 を下回った場合以外は無いのではと思います。その点に関しては、DWord 型 とリテラル値の加減算でも同じで、そちらは警告が出ませんよね。

バグではなく、警告としなければ為らない理由が在るのでしたら、教えて頂けますか。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年3月25日(火) 17:21 
使用バージョンは 4.24.00 です。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年3月25日(火) 17:55 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 895
住所: 東京都
たしかに警告は不自然に感じますね。整数の指数演算に関する言語の規則を決めて,警告しないようにするほうがよいと私も思います。
今の挙動がどうしてそうなのかということは山本さんでないとわからないです……。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年3月25日(火) 21:45 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
住所: 埼玉県東松山市
確かbasic/function.sbp内の関数powの仕様の関係でDouble型を返すことになってたはずです。(コンパイラ側の仕様で必ず内包される関数のひとつの筈。)
グローバル領域でのオーバーロードができれば対処できるかもしれません。
どちらにしても4.24だと無理だった気がするんですが。

具体的には[hide=こんな奴]
コード:
Function pow(x As Long, n As DWord) As Long
	Dim r As Long

	r=1
	While n
		If n and 1 Then r=r*x
		x=x*x
		n=n>>1
	Wend

	pow=r
End Function
[/hide]を定義(オーバーロード)する必要があるわけです。
直接書き換えるとDouble型の演算がうまくいかなくなると思うのでやめておいてください。

#Fixとかは組み込むのにこいつを組み込まないのはどうしてなんでしょうねぇ・・・。
[hide=追記:山本さんが機械語を読まないのを思い出したので、組み込み用のバイナリとか作ってみました。]どうみても暇なだけです。
55 8B EC 53 56 8B 4D 0C B8 01 00 00 00 8B 5D 08
F7 C1 01 00 00 00 74 02 F7 EB 8B F0 8B C3 F7 E8
8B D8 8B C6 D1 E9 75 E8 5E 5B C9 C2 08 00
(46byte,呼び出し:stdcall,引数:上のコードと同一)[hide=source code]
コード:
pow	proc	x:dword,n:dword
	push	ebx
	push	esi
;ret=r=eax
;n=ecx
;x=ebx
	mov	ecx,n
	mov	eax,1
	mov	ebx,x
_l1:
	test	ecx,1
	jz	_l2
	imul	ebx
_l2:
	mov	esi,eax
	mov	eax,ebx
	imul	eax
	mov	ebx,eax
	mov	eax,esi
	shr	ecx,1
	jnz	_l1
	pop	esi
	pop	ebx
	ret
pow	endp
[/hide][/hide]

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2008年3月28日(金) 17:22 
konisi さん、今日は。今回も返信有難う御座います。

パッと見て解るものではないようですので、とりあえずお礼のみで。

有難う御座いました。


通報する
ページトップ
   
 記事の件名:
投稿記事Posted: 2008年3月28日(金) 17:32 
御免なさい。イグトランスさんの返信、後から気付きました。僅か三十分位の差のものでしたのに。

>>整数の指数演算に関する言語の規則を決めて,警告しないようにするほうがよいと私も思います。

ver.5 では改善されている事を願います。現状は、仕様と認識して置きます。

イグトランスさん、申し訳在りませんでした。有難う御座いました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

All times are UTC+09:00


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by KONISHI Yohsuke