アイテムの所持時回避力修正のバグ?

Issue #642 duplicate
Former user created an issue

CardWirthPy 2.3

Build: 2018-02-04 14:47:33

で確認

Lv5 敏捷+慎重=6のキャラクターに

適正:敏捷+慎重 所持時回避力修正+3のアイテムを装備(適正玉:影緑)

上記に命中値10相当の攻撃を500回行った結果Pyと1.50とで大きく差が出ました

py=回避回数279  100回辺りの回避数=55.8

1.50=回避回数219  100回辺りの回避数=43.8

上記のキャラクターに

適正:敏捷+慎重 所持時回避力修正+1のアイテムを装備した場合の結果が

py=223  100回辺りの回避数=44.6

1.50=235  100回辺りの回避数=47

適正による修正が正しく機能して無いと思われます。

抵抗と防御は調べていませんが、同様の可能性があると思われます。

Comments (4)

  1. k4nagatsuki repo owner

    アイテムと召喚獣の能力修正には適性が影響しなかったと思うのですが、1.50では違うのでしょうか?

    時間のある時に調べてみます。

  2. k4nagatsuki repo owner

    添付したようなシナリオを使って1000回辺りの回避数を調査してみました。

    確かに、特定の値で1.50とCWPyで結果にずれが生じています。以下はボーナス値と回避数の結果を列挙したグラフです。上のグラフは実際の回避数、下のグラフはそこから推定したボーナスの段階です。

    1.png

    知られている回避ボーナスの計算式と照らし合わせると、1.50では特定の値でボーナスが1ポイント低い値で計算されているように見えます。

    なぜこんな事が起きるのか考えてみましたが、どうも浮動小数点の計算誤差ではないかと思います。ボーナス値を積算していく処理の中で、たとえば本来5になるはずの結果が4.9999...のような値になってしまい、整数に丸められた時に4に変化してしまう、という現象です。

    プラス方向ではなくマイナス方向へ1段階だけずれが生じている所が、いかにもそれらしいです。また、この現象はCW上で他にも例があり、たしかCW 1.20で特定の適正値で各種効果時間を計算した時にも発生していたと記憶しています。

    では、これに合わせてCWPyでは意図的に計算誤差を織り込むように式を変更してみては?という方向の話になると思うのですが、これはかなり難しいです。というのも、他のボーナス値が少し変化するだけで誤差の出方が変化してしまうからです。たとえばカードは上と同じ条件で、キャスト本体の回避ボーナスを+1にするだけで、以下のように各値の状況が変わってしまいます。

    2.png

    これはかなり頭の痛い問題です。理論的にはともかく、現実的に合わせる事は不可能かもしれません。

  3. k4nagatsuki repo owner

    修正内容はissue #645を参照していただきたいのですが、1.50で計算誤差が出ているというのは濡れ衣でした。お詫びします。

  4. Log in to comment