久しぶりにPokecom GO2ネタ。
ユーザーレビューでSIN 180 = 0.22e-16ってなるよというフィードバックをもらいました。
JavaのMath.sin()メソッドの引数はdouble型のラジアン値なので、180はMath.toRadians()でラジアン単位に変換して計算している。だから小数の値になってしまうので誤差が出るのは当たり前なんだけど。
COS, TANなども同じ。
このアプリを関数電卓として使う人なんていない(普通いないよね??)ので、あまり真面目にインプリしていなかったんだけど、ツッコミが入りました。。。
んーーーでも、どうやって対応しようかな。
degree値の場合は180の倍数ならば0にすればいいだけのような気がする。
radian値の場合はどうするんだろう。変数PIを検出するしかないのかな。ちょっと難しいな。
---
追記(2020/12/19)
radianの場合も普通にMath.PIで計算すればPIの倍数かどうかの計算ができた。
ということで 1.05.01で修正しました。
ユーザーレビューでSIN 180 = 0.22e-16ってなるよというフィードバックをもらいました。
JavaのMath.sin()メソッドの引数はdouble型のラジアン値なので、180はMath.toRadians()でラジアン単位に変換して計算している。だから小数の値になってしまうので誤差が出るのは当たり前なんだけど。
COS, TANなども同じ。
このアプリを関数電卓として使う人なんていない(普通いないよね??)ので、あまり真面目にインプリしていなかったんだけど、ツッコミが入りました。。。
んーーーでも、どうやって対応しようかな。
degree値の場合は180の倍数ならば0にすればいいだけのような気がする。
radian値の場合はどうするんだろう。変数PIを検出するしかないのかな。ちょっと難しいな。
---
追記(2020/12/19)
radianの場合も普通にMath.PIで計算すればPIの倍数かどうかの計算ができた。
ということで 1.05.01で修正しました。
コメント
コメント一覧 (2)
とてもワクワクするアプリを有難うございます!
Pokecom GO2、関数はともかくカッコ付の計算に使わせてもらっています。
PBユーザだったので使い勝手が良いです。
通常の関数電卓としても需要があるのですね。
ゲームが正しく再現できるかに重きを置いていたので、通常の計算はあまり真面目にインプリしていませんでした。
内部ではまだdouble型で処理している部分が残っているので、SIN 180 みたいな計算で実機と違うところがまだありそうです。
もう一度デバッグしてみます。