handle underflow for acc percentage
This commit is contained in:
+3
-2
@@ -4,8 +4,9 @@
|
|||||||
- When passing an osu!std map to `TaikoGradualDifficultyAttributes` or `ManiaGradualDifficultyAttributes`, it now automatically converts the map internally. For osu!catch is was already happening trivially.
|
- When passing an osu!std map to `TaikoGradualDifficultyAttributes` or `ManiaGradualDifficultyAttributes`, it now automatically converts the map internally. For osu!catch is was already happening trivially.
|
||||||
|
|
||||||
- __Fixes:__
|
- __Fixes:__
|
||||||
- Fixed passed object count for taiko by ignoring non-circles.
|
- Fixed passed object count for taiko by ignoring non-circles
|
||||||
- Fixed a niche panic on UTF-16 encoded maps ([#18])
|
- Fixed a niche panic on UTF-16 encoded maps. ([#18])
|
||||||
|
- Fixed an occasional underflow when calculating accuracy pp
|
||||||
|
|
||||||
# v0.9.1 (2022-10-26)
|
# v0.9.1 (2022-10-26)
|
||||||
|
|
||||||
|
|||||||
+8
-9
@@ -596,20 +596,19 @@ impl OsuPpInner {
|
|||||||
// * of the calculation we focus on hitting the timing hit window.
|
// * of the calculation we focus on hitting the timing hit window.
|
||||||
let amount_hit_objects_with_acc = self.attrs.n_circles;
|
let amount_hit_objects_with_acc = self.attrs.n_circles;
|
||||||
|
|
||||||
let mut better_acc_percentage = if amount_hit_objects_with_acc > 0 {
|
let better_acc_percentage = if amount_hit_objects_with_acc > 0 {
|
||||||
((self.state.n300 - (self.state.total_hits() - amount_hit_objects_with_acc)) * 6
|
let sub = self.state.total_hits() - amount_hit_objects_with_acc;
|
||||||
+ self.state.n100 * 2
|
|
||||||
+ self.state.n50) as f64
|
if self.state.n300 < sub {
|
||||||
|
0.0
|
||||||
|
} else {
|
||||||
|
((self.state.n300 - sub) * 6 + self.state.n100 * 2 + self.state.n50) as f64
|
||||||
/ (amount_hit_objects_with_acc * 6) as f64
|
/ (amount_hit_objects_with_acc * 6) as f64
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
0.0
|
0.0
|
||||||
};
|
};
|
||||||
|
|
||||||
// * It is possible to reach a negative accuracy with this formula. Cap it at zero - zero points.
|
|
||||||
if better_acc_percentage < 0.0 {
|
|
||||||
better_acc_percentage = 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// * Lots of arbitrary values from testing.
|
// * Lots of arbitrary values from testing.
|
||||||
// * Considering to use derivation from perfect accuracy in a probabilistic manner - assume normal distribution.
|
// * Considering to use derivation from perfect accuracy in a probabilistic manner - assume normal distribution.
|
||||||
let mut acc_value = 1.52163_f64.powf(self.attrs.od) * better_acc_percentage.powi(24) * 2.83;
|
let mut acc_value = 1.52163_f64.powf(self.attrs.od) * better_acc_percentage.powi(24) * 2.83;
|
||||||
|
|||||||
Reference in New Issue
Block a user