mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-22 22:11:04 +00:00
Use longs to avoid two's complement failure in approxEqual
This commit is contained in:
parent
79ec4c89a3
commit
3e38074a9f
|
@ -341,15 +341,16 @@ namespace OpenTK
|
|||
/// <param name="maxDeltaBits">the number of floating point bits to check</param>
|
||||
/// <returns></returns>
|
||||
public static bool ApproximatelyEqual(float a, float b, int maxDeltaBits) {
|
||||
int aInt = FloatToInt32Bits(a);
|
||||
// we use longs here, otherwise we run into a two's complement problem, causing this to fail with -2 and 2.0
|
||||
long aInt = FloatToInt32Bits(a);
|
||||
if (aInt < 0)
|
||||
aInt = Int32.MinValue - aInt;
|
||||
|
||||
int bInt = FloatToInt32Bits(b);
|
||||
long bInt = FloatToInt32Bits(b);
|
||||
if (bInt < 0)
|
||||
bInt = Int32.MinValue - bInt;
|
||||
|
||||
int intDiff = Math.Abs(aInt - bInt);
|
||||
long intDiff = Math.Abs(aInt - bInt);
|
||||
return intDiff <= (1 << maxDeltaBits);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue