トピック
ナス ryoumasuhara

反応しない

このプログラムの21行目で「H2が0.999になったらCに1追加して、H2を0にする」ということをしたいのですが、0.999になってもそのまま過ぎて行き、追加もされません。(0.999になることは確認済み) どうすればいいですか?
1そうだね
プレイ済み
返信[1]
親投稿
>>0.999になることは確認済み これは「変数==0.999」を表示して確認したの?
2そうだね
プレイ済み
返信[2]
親投稿
ナス ryoumasuhara
PRINTで表示させて、0.9ぐらいになったらひたすらCONT→SELECTを繰り返して確認しました
3そうだね
プレイ済み
返信[3]
親投稿
PRINTで表示するだけではダメ。 見えてる数が同じだからと言って完全に一致してるとは限らない。 おちゃめさんのPSTR$()でも使って厳密に表示しないと。 わざわざユーザー関数を導入するのが面倒なら 変数==目的の値 で1(すなわちTRUE)になるか確認する これが手っ取り早い
3そうだね
プレイ済み
返信[4]
親投稿
つばさ☆ nsm2116
その行を IF 変数>=0.999 && 変数<=0.999 THEN 処理……… にしたらできる気がする。
1そうだね
プレイ済み
返信[5]
親投稿
つばさ☆ nsm2116
なら0.999から0.999までのすごく小さい小数の差も判定できる。 0.999だけじゃないから質問の回答になってないかもしれない。
2そうだね
プレイ済み
返信[6]
親投稿
つばさ☆ nsm2116
IF H2>=0.999 && H2<=0.999 THEN H2=0:C=C+1 的な。
1そうだね
プレイ済み
返信[7]
親投稿
ナス ryoumasuhara
つばさ☆さんのを試してみたのですが出来なかって、おちゃめさんのPSTR$を使ったけど0.999のままでした。 A$=PSTR$(0.999) PRINT A$ 0.999 OK
2そうだね
プレイ済み
返信[8]
親投稿
SilverBlue Corei72630QM
つMILLISEC
2そうだね
プレイ済み
返信[9]
親投稿
つばさ☆ nsm2116
なんならいっそ IF H2>=0.999 THEN H2=0:C=C+1 で良くね?w
2そうだね
プレイ済み
返信[10]
親投稿
SilverBlue Corei72630QM
IF A>=0.95 THEN A%とか
2そうだね
プレイ済み
返信[11]
親投稿
ナス ryoumasuhara
H2<=0.999で出来ました。 協力していただいた皆さんありがとうございました。 <=って意味を調べてきます
1そうだね
プレイ済み
返信[12]
親投稿
Soybeanman 2013niconico
こっちの方法の方が正確だと思われる。
1そうだね
プレイ済み
返信[13]
親投稿
ナス ryoumasuhara
ありがとうございます! セーブを作っていた新たな疑問が生まれてしまったぁぁあぁ… Aなどの変数?をA$などの文字列に変換することは出来ますか?
1そうだね
プレイ済み
返信[14]
親投稿
Soybeanman 2013niconico
STR$でおKだと思われる。
1そうだね
プレイ済み
返信[15]
親投稿
ナス ryoumasuhara
ありがとうございます。 セーブはうまく出来たのですが、ロードがうまくできません。 TXTです。 ダウンロードしてどこがいけないのか教えてください。(まず何回かAを押して、そしてセーブをしてください) キーはCOOKIE_PUSHというやつ
0そうだね
プレイ済み
返信[16]
親投稿
これでいける。 VALはSTRの反対で文字列を数値にする命令
1そうだね
プレイ済み
返信[17]
親投稿
おちゃめ ochame_nako
私がPSTR$を使って正確な値を表示してみたところ0.999になるはずの時点(0.003を333回足した時点)では0.99900000000000078でした。 0.99900000000000078と0.999は等しくないのでIF文のTHEN以下は実行されないのが正しい動作です。 PSTR$で0.999と表示されたのでしたら0.003を333倍した値ではないかと思います。 実数型では小数を含む値を計算するごとに誤差が蓄積されていくので「0.003を333倍した値」と「0.003を333回足した値」は異なります。 実数型をSTR$で文字列に変換する場合もセーブする場合も値が丸められるため注意が必要です。 正確さを重視するならば整数で計算(1ずつ加算)して表示の段階で0.003倍すると良いでしょう。
2そうだね
プレイ済み
返信[18]
親投稿
おちゃめ ochame_nako
実数型の誤差による誤動作に関してはこちらのトピックを参考にしてみてください。 https://miiverse.nintendo.net/posts/AYIHAAAEAAASVZKdAWi67g さらに詳しく知りたければ「プチコン3号 実数型 誤差」などのキーワードでWeb検索すると良いでしょう。
2そうだね
プレイ済み
返信[19]
親投稿
ナス ryoumasuhara
丁寧な説明ありがとうございます。勉強になりました。
0そうだね
プレイ済み