chknumでint型の範囲を超えると正しく判定されない
Closed this issue · 4 comments
cocco84 commented
概要
タイトルの通り
再現スクリプト
print chknum(2147483648) //false
再現手順
No response
バージョン
1.0.0
不具合発生環境
Windows 10
stuncloud commented
UWSCの動作に合わせる
要調査
- 上限があるかどうか
cocco84 commented
こちらで確認してみたUWSCの挙動です。ご参考までです。
a = 999999999999999
print chknum(a) // true
print chknum(a + 1) // false
print chknum(a - 1) // true
print 999999999999999 + 1 // 1E15
print 999999999999999 - 1 // 999999999999998
b = 1000000000000000
print chknum(b) // false
print b // 1E15
c = "1000000000000000"
print chknum(c) // true
print chknum(val(c)) // false
print val(c) // 1E15
stuncloud commented
調査報告いただきありがとうございます
文字列の挙動が謎ですね、このあたりはVARIANTの仕様も絡みそうです
UWSCRの数値はf64 (UWSCでいうところのdouble) なのでその範囲であればtrueを返すこととします
どのみちそこを超えると数値としては扱えず、val()
との整合性も考えるとそういう仕様にするしかないですね
stuncloud commented
引数をi32ではなくf64として受けた場合の動作
a = 999999999999999
print chknum(a) // True
print chknum(a + 1) // True
print chknum(a - 1) // True
print 999999999999999 + 1 // 1000000000000000
print 999999999999999 - 1 // 999999999999998
b = 1000000000000000
print chknum(b) // True
print b // 1000000000000000
c = "1000000000000000"
print chknum(c) // True
print chknum(val(c)) // True
print val(c) // 1000000000000000
UWSCでは数値扱いでなかったものも数値扱いとなるのでむしろ良さそう
これを修正とします