投稿
おちゃめ ochame_nako
プチコン3号では比較演算でtrueとなった時の値は「1」、falseの時は「0」を返します。(例えばX=3ならば PRINT X==3 とすれば1が表示される) というのは絶対的に正しいわけではなく実は数値と文字列の比較演算を行ったらtrueやfalseに関係なく「3」を返します。(ただし、Type mismatchエラーにならない場合のみ) プチコン3号においてtrueならば「1」、falseならば「0」という盲信は良くないですね(笑)
4そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
そう言えば前に、比較演算の結果==3、を利用した型判定プログラムを投稿されてましたね。 拝見して気になったのですが、数値と文字列を比較して3になるのって、はじめの3.0.0からでしたっけ? 最初はTypeMissmatchになっていたような覚えがありまして……… あと、数値と文字列比較で3になるのって、どこかに情報ありましたでしょうか?
0そうだね
プレイ済み
返信[2]
親投稿
pinfu ANNAININ
成立したら1、不成立で0というのは、さておき。 数値と文字列の比較?? 成立でも不成立でもないから、0でも1でもないのをかえす。という理解でいいのでしょうか?? なんだか、さぱーりなのですが・・・
0そうだね
プレイ済み
返信[3]
親投稿
けい kei0baisoku
はっ!(゜ロ゜) 余計なお世話かもしれませんが、この投稿の内容は本当ですよ!>見てる方 (この習慣メンドクサイ………(´з`))
1そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
けいさんへ 文字列と数値の比較演算で3を返すというのを使ったプログラムは私のSUFFIX関数くらいしかないと思います(笑) これのお陰でinfとnanを駆使して行う必要があった型の判定がすごく短くできました。 ちなみに比較演算で3を返すようになったのはver.3.1.0からで私が自力で見つけました。
0そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
pinfuさんへ ? "A"==1 としてみてください。 本来ならば文字列と数値で比較演算はできないためType mismatchエラーとなりそうですが、画面には3と表示されていることが分かると思います。 これが何に使えるかというと型判定くらいしか私は思いつかないのですが、それだけでも大きなメリットだと思います。
1そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
>おちゃめさん おお、ありがとうございます(^O^) やっぱり更新後からだったのですね! しかもどこにも情報があったわけでは無い、と。 ホント、よく見つけましたね(^^; 長く使うのはそのうち挙動が変わりそうでやや不安ですが、楽に型判定が出来るのは地味に便利ですね(´ω`)
0そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
けいさんへ 私はmkIIでもプログラムの最適化(高速化、リスト短縮化)のためエラーにならないギリギリのものを探し出してきましたが今回のは少し前に型判定ですごく苦労した部分があっさり解決できたので誰かが見つける前に自作関数への活用例として発表しました(笑) 大したものではない場合は自サイトのみでこっそり発表しています。
0そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
見つけるコツとしてはわざとエラーが出そうなコードを書いてみます。 その時点でエラー無しで動けばなぜそれでエラーが出ないのか探るだけですが、正常動作しない場合は少しずつ正常動作するコードに近づけることでギリギリのポイントが分かるし、プチコンの内部処理の挙動が少しずつ見えてきます。
1そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
プチコンmkIIでは0.99999が0と解釈されて少し驚きましたがこれで有効数字をどのように丸めているのかがはっきり分かりました。(何の活用もできない発見ですが)
0そうだね
プレイ済み
返信[10]
親投稿
けい kei0baisoku
普段からエラーと通るコードの境目を検証されてる訳ですね。それはすぐに気付くのも偶然でなく必然ですねw(^O^) 0.99999の丸め方も、勘違いして覚えてるとバグになりそうなので内部挙動を想像できるのは大切ですね。
0そうだね
プレイ済み
返信[11]
親投稿
ツララ LongIceSword
"A"==1を逆に1=="A"と書くとエラーが出るんですね。
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
けいさんへ 32bit固定小数点演算のみをサポートしているプチコンmkIIは小数点以下3~4桁の演算精度しかないため演算中に0.999999という状態になることは無くてリテラルで記述する必要があるので実際は覚えなくても特に問題はないです。 詳しくは「コラム プチコンの演算精度」で検索してみてください。 ツララさんへ 逆に書けばエラーになるのがなぜかを考えるとプチコン3号の構文解析の仕組みが少しだけ見えてきますよね。
1そうだね
プレイ済み