2006/09/29(金)計算式の変換
Mimuraたんのソースコードコンバータ2についてちょっとお付き合い。
HSP2の計算式をHSP3で取り扱うにはどうしたもんか。
HSP2では、演算子に優先順序がない。 1+(2*(3+4)*5)-6*7 = 455
HSP3では、演算子に優先順序がある。 1+(2*(3+4)*5)-6*7 = 29
つまるところ、HSP3で 455 を得たいのであるが…… というお話。
たとえばH時間M分S秒を秒に直すことを考えるとする。
正攻法となる式は、(H*3600)+(M*60)+S だろうが、
HSP2時代の私は、よく H*60+M*60+S と書いたものだ。
もちろん、「カッコを使うと遅くなる」からカッコを使うのには抵抗があったし、
たぶん、HSP2の世界においてはこの方が美しかったのだと思う。
1+(2*(3+4)*5)-6*7 を計算して 455を得なければ、HSP2toHSP3の変換なんかとてもできたことにはならん。
なんてことを喋ってしまったがために頭を痛くさせてしまったようだ。
まぁ、一方では事実だと思うんだけどね。うん。
私のHSP2のソースから、座標を計算するためのこんな式もでてきた。
gX+(gW-gB-gB*((hp<dhp*hp)+(hp>=dhp*dhp))/mhp)+gB-1
さて、どうしましょうねぇ、これ、とか思いつつ、計算式コンバータを書いてみた。
結果は以下。式を解釈しているわけではないので冗長的な部分もあるが……
((1+((2*(3+4))*5))-6)*7 = 455 ((gX+((((gW-gB)-gB)*((((hp<dhp)*hp))+((hp>=dhp)*dhp)))/mhp))+gB)-1
んまぁ、結果が合っているから、コンバータとしては十分、か?