Improved output distribution of RoundToLevels (#25026)

* Improved output distribution of RoundToLevels

* Updated tests

* Oops
This commit is contained in:
Tayrtahn 2024-02-07 18:37:24 -05:00 • committed by GitHub
parent 8ccdbe7350
commit 9cee54e5a1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 7 additions and 27 deletions

View file

@ -35,27 +35,7 @@
}
var toOne = actual / max;
double threshold;
if (levels % 2 == 0)
{
// Basically, if we have an even count of levels, there's no exact "mid point".
// Thus, I nominate the first one below the 50% mark.
threshold = ((levels / 2f) - 1) / (levels - 1);
}
else
{
threshold = 0.5f;
}
var preround = toOne * (levels - 1);
if (toOne < threshold || levels <= 2)
{
return (int) Math.Ceiling(preround);
}
else
{
return (int) Math.Floor(preround);
}
return (int) Math.Ceiling(toOne * (levels - 2));
}
/// <summary>

View file

@ -18,15 +18,15 @@ namespace Content.Tests.Shared.Utility
(0.01f, 10, 5, 1),
(1, 10, 5, 1),
(2, 10, 5, 1),
(2.5f, 10, 5, 1),
(2.51f, 10, 5, 2),
(3, 10, 5, 2),
(3, 10, 5, 1),
(3.33f, 10, 5, 1),
(3.34f, 10, 5, 2),
(4, 10, 5, 2),
(5, 10, 5, 2),
(6, 10, 5, 2),
(7, 10, 5, 2),
(7.49f, 10, 5, 2),
(7.5f, 10, 5, 3),
(6.66f, 10, 5, 2),
(6.67f, 10, 5, 3),
(7, 10, 5, 3),
(8, 10, 5, 3),
(9, 10, 5, 3),
(10, 10, 5, 4),