アンドロイドの経験値計算におけるオーバーフロー (フォーラムメッセージ #80069 からの引用)
フォーラム 変愚蛮怒フォーラム [#80069] からの引用
[forum: 80069]
現状は全く無害なものですが、 アンドロイドで混沌の堂々たる鉄冠を装備した時に経験値計算がオーバーフローしている模様です。 以下はeffects.c 内のcalc_android_exp() の問題個所ですが exp = MIN(100000L, value) * level * level / 2; if (value > 100000L) exp += (value - 100000L) * level * level / 8; 堂々たる鉄冠のcost は500万以上なのでvalue = 5000000L level は計算の結果34が代入されますが 4900000 * 34 * 34 の時点で5,664,400,000 となり 32bit 整数の上限を超えてループした結果1,369,432,704となります。 この結果本来47,865,625であったはずの強化値は14,311,193 になります。 ループ後でもLv50に達するのに十分な強化値ですし、 2番目に高いやる気のない服でも途中の数値は10億程度までなので 現状では一切問題を起こすものではありませんが、 今後cost 100万以上の★を追加した際にちょうどループ後に低い強化値に留まる 場合も考えられますのでcost 上限を下げるか、割り算を先に行うなどの修正を した方が良いかも知れません。 #67685 への返信
ほぼ指摘通りにオーバーフローを修正。混沌の堂々たる鉄冠装備時に途中計算が、キャップであるvalue=5000000Lに到達することを前提とし、その後の計算でオーバーフローが発生せず、経験値が47,865,625となった。
以上で、チケット完了。ご協力ありがとうございました。
フォーラム 変愚蛮怒フォーラム [#80069] からの引用
[forum: 80069]