[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