[Scummvm-git-logs] scummvm master -> 056be7264155e15a8e8756c82923ef4b28f464ca
elasota
noreply at scummvm.org
Tue Aug 6 02:00:37 UTC 2024
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
056be72641 MTROPOLIS: Fix inaccurate mixed-sign modular arithmetic
Commit: 056be7264155e15a8e8756c82923ef4b28f464ca
https://github.com/scummvm/scummvm/commit/056be7264155e15a8e8756c82923ef4b28f464ca
Author: elasota (1137273+elasota at users.noreply.github.com)
Date: 2024-08-05T21:59:42-04:00
Commit Message:
MTROPOLIS: Fix inaccurate mixed-sign modular arithmetic
Changed paths:
engines/mtropolis/miniscript.cpp
diff --git a/engines/mtropolis/miniscript.cpp b/engines/mtropolis/miniscript.cpp
index be101e9a26c..ae9fd7e9fa0 100644
--- a/engines/mtropolis/miniscript.cpp
+++ b/engines/mtropolis/miniscript.cpp
@@ -762,7 +762,19 @@ MiniscriptInstructionOutcome Modulo::arithExecute(MiniscriptThread *thread, doub
thread->error("Arithmetic error: Modulo division by zero");
return kMiniscriptInstructionOutcomeFailed;
}
- result = fmod(left, right);
+
+ // fmod keeps the sign from the left operand, but mTropolis modulo keeps the
+ // sign of the right operand.
+ double r = fmod(left, right);
+ if (signbit(left) != signbit(right)) {
+ if (r == 0.0)
+ r = copysign(0.0, right);
+ else
+ r += right;
+ }
+
+ result = r;
+
return kMiniscriptInstructionOutcomeContinue;
}
More information about the Scummvm-git-logs
mailing list