From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Martijn Muijsers Date: Tue, 29 Aug 2023 22:29:08 +0200 Subject: [PATCH] Faster floating-point positive modulo License: GPL-3.0 (https://www.gnu.org/licenses/gpl-3.0.html) Gale - https://galemc.org diff --git a/net/minecraft/util/Mth.java b/net/minecraft/util/Mth.java index 75da3011058918e1da6936522f19a2ccdb843d73..1b60fa34e4d6a5c00a983bf94e4d16d1eb46c665 100644 --- a/net/minecraft/util/Mth.java +++ b/net/minecraft/util/Mth.java @@ -149,14 +149,26 @@ public class Mth { return Math.floorMod(x, y); } - public static float positiveModulo(float numerator, float denominator) { + public static float positiveModuloForAnyDenominator(float numerator, float denominator) { // Gale - faster floating-point positive modulo return (numerator % denominator + denominator) % denominator; } - public static double positiveModulo(double numerator, double denominator) { + public static double positiveModuloForAnyDenominator(double numerator, double denominator) { // Gale - faster floating-point positive modulo return (numerator % denominator + denominator) % denominator; } + // Gale start - faster floating-point positive modulo + public static float positiveModuloForPositiveIntegerDenominator(float numerator, float denominator) { + var modulo = numerator % denominator; + return modulo < 0 ? modulo + denominator : modulo; + } + + public static double positiveModuloForPositiveIntegerDenominator(double numerator, double denominator) { + var modulo = numerator % denominator; + return modulo < 0 ? modulo + denominator : modulo; + } + // Gale end - faster floating-point positive modulo + public static boolean isMultipleOf(int number, int multiple) { return number % multiple == 0; } diff --git a/net/minecraft/world/level/levelgen/blending/Blender.java b/net/minecraft/world/level/levelgen/blending/Blender.java index 01e5b29d6e9a5c53c0e23b61ed0c1d7be1a0fe08..314a189e2099e3688fd23e7100120abea6886ccd 100644 --- a/net/minecraft/world/level/levelgen/blending/Blender.java +++ b/net/minecraft/world/level/levelgen/blending/Blender.java @@ -144,7 +144,7 @@ public class Blender { private static double heightToOffset(double height) { double d = 1.0; double d1 = height + 0.5; - double d2 = Mth.positiveModulo(d1, 8.0); + double d2 = Mth.positiveModuloForPositiveIntegerDenominator(d1, 8.0); // Gale - faster floating-point positive modulo return 1.0 * (32.0 * (d1 - 128.0) - 3.0 * (d1 - 120.0) * d2 + 3.0 * d2 * d2) / (128.0 * (32.0 - 3.0 * d2)); }