HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0719
kei#constのバグ?4未解決


kei

リンク

2014/7/19(Sat) 22:36:18|NO.62977


#define a 1000 #const b 1 / a #const c b

上記スクリプトを実行すると3行目でエラーとなります。

1000 を 100、10000、100000000、-100、-10000、-100000000に変えても、
また、1 を 1、2、-1、-2 に変えても同様にエラーとなります。

上に書いた値と少しでも違っていればエラーにはなりません。
おそらく、#constにおける小数の計算のバグのような気がするのですが、どうでしょうか…



この記事に返信する


kei

リンク

2014/7/19(Sat) 22:38:48|NO.62978

補足、1000を-1000に変えても同様です。
またエラーは"expression syntax error"となっています。



KOMARI

リンク

2014/7/19(Sat) 23:01:28|NO.62980

試してみた結果、同様のエラーが出ました。環境は3.4beta5です。
関係ない話ですが、#const double〜はできるのに#const int〜ができなくて腹が立ったことがあります('A`)



掘木

リンク

2014/7/20(Sun) 00:21:23|NO.62985

奇妙な現象ですねえ。こちらでもエラーですね(3.4b2)。
#constで作った数値が#constにとって非数値扱い・・・。

コンパイル時の置換結果から推察するに、
#constの指数表現とその対応に難があるようです。

どうにも、
#constが計算結果として出力する際に、A.(BBB)e±CCCの形をしているのに、
#constが数値とみなせるのが、A.BBBe±CCCの表記(少なくともBBBを省略不可)なようで

#define W 1000 // ←W is [1000] #const X 1/W // ←X is [1.e-003] == 0.001 == 1/1000 #const Y X // ←[1.e-003]は数値扱いでないため構文エラーを吐かれる
どうしようもないですね。

クリティカルな数値になる可能性があるものに#constを用いない・・・くらいかな?
double型変数にするなり#defineにするなり。。。?逐次計算で重そう。。。

とりあえずHSPバグトラッッキングシステムの報告を出してみては?
機能しているのかよく分からないけど。(まずログインできない・・・。



Tetr@pod

リンク

2014/7/21(Mon) 19:25:03|NO.63021

実数値の条件判定に問題があるっぽいですね。
OpenHSP版のhspcmpのソースコードを見てみたところhspcmp/token.cppの
CToken::GetToken関数に問題があるっぽかったのでコードを一部変更した
ところ問題なく動作するようになりました。

変更箇所:

485行目: if ((a2<0x30)||(a2>0x39)) break; →if (((a2<0x30)||(a2>0x39))&&(a2!='e')) break; 490行目の後に if (a2=='e') { a1='0'; s3[a++]=a1; break; } を追加



ONION software Copyright 1997-2023(c) All rights reserved.