ページ 11

代入演算子に関するバグとQWord型の表示に関するバグ

Posted: 2008年6月27日(金) 18:08
by konisi
ふと思いついて試してみたら見つかったものを報告します。
AB423とAB424で誤動作を確認しました。

コード: 全て選択

#console
Dim a As Long
a=2
a*=1+2
Print a'6と表示してほしいが、4と表示される

Dim b As QWord
b=12345678901234567890'<2^64=18446744073709551616
Print b'12345678901234567890と表示される筈だが、負の数が表示される

Sleep(-1)

Qword型

Posted: 2008年7月11日(金) 08:02
by 三毛CAT
自分もQword型に付いては気になったので試してみました。(この書き込みを見る前に)
他の符号なし整数型は普通に動くのですけどね...。

コード: 全て選択

#N88BASIC
Dim a As Qword
Dim b As Int64
Dim c As Char
Dim d As Byte
Dim e As Integer
Dim f As Word
Dim g As Long
Dim h As Dword
a=18446744073709550000
b=18446744073709550000
c=250
d=250
e=65500
f=65500
g=4294967000
h=4294967000
Print "↓Qword"
Print a
Print "↓Int64"
Print b
Print "↓Char"
Print c
Print "↓Byte"
Print d
Print "↓Integer"
Print e
Print "↓Word"
Print f
Print "↓Long"
Print g
Print "↓Dword"
Print h

代入演算子に関するバグとQWord型の表示に関するバグ

Posted: 2010年3月06日(土) 07:17
by MonkeyTake
最近AB4.24を使い始めておかしいな・・・とずっと悩んでいたら
代入演算子のバグですか・・・

AB4.24が出たのは2006/4/8ですが
こんな超基本的な事のバグがずっと放置されてるなんて・・・

Posted: 2010年3月06日(土) 20:32
by ヒィー(((゚Д゚)))

コード: 全て選択

#console
Dim a As Long
a=2
a*=1+2
Print a'6と表示してほしいが、4と表示される

Dim b As QWord
b=12345678901234567890'<2^64=18446744073709551616
Print b'12345678901234567890と表示される筈だが、負の数が表示される

Sleep(-1)
一つ目は6になりますが。

Posted: 2010年3月07日(日) 00:06
by イグトランス
QWordのほうですが、直接の原因はPrintの数値出力がDouble型しか受け付けないことにあります。
さらに、x86 FPUの命令にQWord→Doubleという変換が用意されておらず、ABコンパイラがQWord→Doubleの変換にInt64→Doubleの変換命令を用いていることで、あのような出力となってしまっています。

QWord→Doubleの変換の問題は解消されていなかったと思いますが、Printで期待通りの出力にならないという点は現時点のAB5でも解消済みだったはずです。いつ出せるか分からないという状況で申し訳ありません。

Posted: 2010年3月10日(水) 15:23
by konisi
ヒィー(((゚Д゚))) さんが書きました:一つ目は6になりますが。
今手元のマシンにあるAB4.23で試したところやはり4になりました。
そちらの環境を教えてくださいな。

OS:WinXPPro SP3 32bit
CPU:Core2Duo 2GHz
MEM:1.72GiB認識

Posted: 2010年3月10日(水) 16:09
by ヒィー(((゚Д゚)))
AB4.24.00
OS:WinXPPro SP3 32bit
CPU:Core2Duo 3GHz
MEM:3.25GiB認識

バイナリとコードをアップ。
http://77c.org/d.php?f=nk13160.zip

Posted: 2010年3月14日(日) 05:13
by konisi
今AB4.24を落とし直してコンパイルしたところ、確かに6になってました。

直ったんですねぇ。