diff options
Diffstat (limited to 'src')
19 files changed, 86 insertions, 52 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java index 6110cf6eeb..6485f0769a 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java @@ -50,7 +50,7 @@ public class MTEComponentAssemblyLine extends MTEExtendedPowerMultiBlockBase<MTE implements ISurvivalConstructable { private int casingTier; - private float speedBonus; + private double speedBonus; protected static final String STRUCTURE_PIECE_MAIN = "main"; private static final IStructureDefinition<MTEComponentAssemblyLine> STRUCTURE_DEFINITION = StructureDefinition .<MTEComponentAssemblyLine>builder() @@ -321,7 +321,7 @@ public class MTEComponentAssemblyLine extends MTEExtendedPowerMultiBlockBase<MTE @Nonnull @Override protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { - speedBonus = (float) (1 / Math.pow(2, casingTier + 1 - recipe.mSpecialValue)); + speedBonus = 1 / Math.pow(2, casingTier + 1 - recipe.mSpecialValue); return super.createOverclockCalculator(recipe).setSpeedBoost(speedBonus); } }; diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java index 840688dff7..4ff0288a28 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java @@ -258,7 +258,7 @@ public class MTEPreciseAssembler extends MTEExtendedPowerMultiBlockBase<MTEPreci @Nonnull @Override protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { - return super.createOverclockCalculator(recipe).setSpeedBoost(mode == 0 ? 1 : 0.5F); + return super.createOverclockCalculator(recipe).setSpeedBoost(mode == 0 ? 1 : 0.5); } }.setMaxParallelSupplier(() -> mode == 0 ? 1 : (int) Math.pow(2, 4 + (casingTier + 1))); } diff --git a/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java b/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java index ed953d9477..af86e7a9fa 100644 --- a/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java +++ b/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java @@ -39,8 +39,8 @@ public abstract class AbstractProcessingLogic<P extends AbstractProcessingLogic< protected Supplier<Integer> maxParallelSupplier; protected int calculatedParallels = 0; protected int batchSize = 1; - protected float euModifier = 1.0f; - protected float speedBoost = 1.0f; + protected double euModifier = 1.0; + protected double speedBoost = 1.0; protected boolean amperageOC = true; protected boolean isCleanroom; @@ -100,12 +100,12 @@ public abstract class AbstractProcessingLogic<P extends AbstractProcessingLogic< return getThis(); } - public P setEuModifier(float modifier) { + public P setEuModifier(double modifier) { this.euModifier = modifier; return getThis(); } - public P setSpeedBonus(float speedModifier) { + public P setSpeedBonus(double speedModifier) { this.speedBoost = speedModifier; return getThis(); } diff --git a/src/main/java/gregtech/api/util/OverclockCalculator.java b/src/main/java/gregtech/api/util/OverclockCalculator.java index 0b27942355..55ac79f730 100644 --- a/src/main/java/gregtech/api/util/OverclockCalculator.java +++ b/src/main/java/gregtech/api/util/OverclockCalculator.java @@ -251,7 +251,7 @@ public class OverclockCalculator { * Sets an EUtDiscount. 0.9 is 10% less energy. 1.1 is 10% more energy */ @Nonnull - public OverclockCalculator setEUtDiscount(float aEUtDiscount) { + public OverclockCalculator setEUtDiscount(double aEUtDiscount) { this.eutDiscount = aEUtDiscount; return this; } @@ -260,7 +260,7 @@ public class OverclockCalculator { * Sets a Speed Boost for the multiblock. 0.9 is 10% faster. 1.1 is 10% slower */ @Nonnull - public OverclockCalculator setSpeedBoost(float aSpeedBoost) { + public OverclockCalculator setSpeedBoost(double aSpeedBoost) { this.speedBoost = aSpeedBoost; return this; } @@ -279,7 +279,7 @@ public class OverclockCalculator { * Discount */ @Nonnull - public OverclockCalculator setHeatDiscountMultiplier(float heatDiscountExponent) { + public OverclockCalculator setHeatDiscountMultiplier(double heatDiscountExponent) { this.heatDiscountExponent = heatDiscountExponent; return this; } diff --git a/src/main/java/gregtech/api/util/ParallelHelper.java b/src/main/java/gregtech/api/util/ParallelHelper.java index 0c995cba7d..de08a59472 100644 --- a/src/main/java/gregtech/api/util/ParallelHelper.java +++ b/src/main/java/gregtech/api/util/ParallelHelper.java @@ -121,7 +121,7 @@ public class ParallelHelper { /** * Modifier which is applied on the recipe eut. Useful for GT++ machines */ - private float eutModifier = 1; + private double eutModifier = 1; /** * Multiplier that is applied on the output chances */ @@ -224,7 +224,7 @@ public class ParallelHelper { * Sets the modifier for recipe eut. 1 does nothing 0.9 is 10% less. 1.1 is 10% more */ @Nonnull - public ParallelHelper setEUtModifier(float aEUtModifier) { + public ParallelHelper setEUtModifier(double aEUtModifier) { this.eutModifier = aEUtModifier; return this; } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java index e7221ef4e1..e815c10a03 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java @@ -571,7 +571,7 @@ public class MTEPCBFactory extends MTEExtendedPowerMultiBlockBase<MTEPCBFactory> @Override protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { return super.createOverclockCalculator(recipe).setNoOverclock(isNoOC()) - .setEUtDiscount((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) + .setEUtDiscount(Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) .setSpeedBoost(getDurationMultiplierFromRoughness()) .setDurationDecreasePerOC(mOCTier2 ? 4.0 : 2.0); } @@ -590,8 +590,8 @@ public class MTEPCBFactory extends MTEExtendedPowerMultiBlockBase<MTEPCBFactory> return !mOCTier1 && !mOCTier2; } - private float getDurationMultiplierFromRoughness() { - return (float) Math.pow(mRoughnessMultiplier, 2); + private double getDurationMultiplierFromRoughness() { + return Math.pow(mRoughnessMultiplier, 2); } private int ticker = 0; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java index ed14343fa3..db36800f42 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java @@ -195,7 +195,7 @@ public class MTEIndustrialAlloySmelter extends GTPPMultiBlockBase<MTEIndustrialA @NotNull @Override protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { - return super.createOverclockCalculator(recipe).setSpeedBoost(100F / (100F + 5F * mLevel)) + return super.createOverclockCalculator(recipe).setSpeedBoost(100.0 / (100 + 5 * mLevel)) .setHeatOC(true) .setRecipeHeat(0) // Need to multiply by 2 because heat OC is done only once every 1800 and this one does it once diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java index 7d2628d958..0c819212ca 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java @@ -312,8 +312,8 @@ public class MTESteamCentrifuge extends MTESteamMultiBase<MTESteamCentrifuge> im @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java index 9588a5d11a..d924f13f49 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java @@ -253,8 +253,8 @@ public class MTESteamCompressor extends MTESteamMultiBase<MTESteamCompressor> im @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java index 76e3ade135..128a021826 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java @@ -306,8 +306,8 @@ public class MTESteamForgeHammer extends MTESteamMultiBase<MTESteamForgeHammer> @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java index 43e6245557..2c9c64be28 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java @@ -255,8 +255,8 @@ public class MTESteamMacerator extends MTESteamMultiBase<MTESteamMacerator> impl @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java index 1fc6e55042..9fa16b0f65 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java @@ -353,8 +353,8 @@ public class MTESteamMixer extends MTESteamMultiBase<MTESteamMixer> implements I @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java index 438a762da6..c1b1b8dcb6 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java @@ -331,8 +331,8 @@ public class MTESteamWasher extends MTESteamMultiBase<MTESteamWasher> implements @Nonnull protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); + .setEUtDiscount(1.33) + .setSpeedBoost(1.5); } }.setMaxParallelSupplier(this::getMaxParallelRecipes); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java index 4b91b42d9f..0adfa82732 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java @@ -316,8 +316,8 @@ public class MTEIndustrialRockBreaker extends GTPPMultiBlockBase<MTEIndustrialRo OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(tRecipe.mEUt) .setEUt(tEnergy) .setDuration(tRecipe.mDuration) - .setEUtDiscount(0.75F) - .setSpeedBoost(1F / 3F) + .setEUtDiscount(0.75) + .setSpeedBoost(1 / 3.0) .setParallel((int) Math.floor(helper.getCurrentParallel() / helper.getDurationMultiplierDouble())) .calculate(); lEUt = -calculator.getConsumption(); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java index 1f97f38402..41f97910bd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java @@ -62,8 +62,8 @@ public class MTEMegaAlloyBlastSmelter extends MTEExtendedPowerMultiBlockBase<MTE private static final int MAX_PARALLELS = 256; private HeatingCoilLevel coilLevel; private byte glassTier = -1; - private float speedBonus = 1; - private float energyDiscount = 1; + private double speedBonus = 1; + private double energyDiscount = 1; private boolean hasNormalCoils; private static final IStructureDefinition<MTEMegaAlloyBlastSmelter> STRUCTURE_DEFINITION = StructureDefinition @@ -254,7 +254,7 @@ public class MTEMegaAlloyBlastSmelter extends MTEExtendedPowerMultiBlockBase<MTE energyDiscount = 1; return; } - energyDiscount = (float) Math.pow(0.95, tierDifference); + energyDiscount = Math.pow(0.95, tierDifference); } @Override diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java index 9e783049ed..22098fb788 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java @@ -232,7 +232,7 @@ public class MTEDEFusionCrafter extends KubaTechGTMultiBlockBase<MTEDEFusionCraf @Override protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { return super.createOverclockCalculator(recipe) - .setSpeedBoost(1f / (mTierCasing - recipe.mSpecialValue + 1)); + .setSpeedBoost(1.0 / (mTierCasing - recipe.mSpecialValue + 1)); } }; } diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java index be81bad80e..b403dba74f 100644 --- a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java @@ -70,8 +70,8 @@ public class MTEBaseModule extends TTMultiblockBase { protected int overclockHeat = 0; protected int maximumParallel = 0; protected int plasmaTier = 0; - protected float processingSpeedBonus = 0; - protected float energyDiscount = 0; + protected double processingSpeedBonus = 0; + protected double energyDiscount = 0; protected long processingVoltage = 2_000_000_000; protected BigInteger powerTally = BigInteger.ZERO; protected long recipeTally = 0; @@ -155,19 +155,19 @@ public class MTEBaseModule extends TTMultiblockBase { return maximumParallel; } - public void setSpeedBonus(float bonus) { + public void setSpeedBonus(double bonus) { processingSpeedBonus = bonus; } - public float getSpeedBonus() { + public double getSpeedBonus() { return processingSpeedBonus; } - public void setEnergyDiscount(float discount) { + public void setEnergyDiscount(double discount) { energyDiscount = discount; } - public float getEnergyDiscount() { + public double getEnergyDiscount() { return energyDiscount; } @@ -199,8 +199,8 @@ public class MTEBaseModule extends TTMultiblockBase { isMagmatterCapable = isCapable; } - public float getHeatEnergyDiscount() { - return isUpgrade83Unlocked ? 0.92f : 0.95f; + public double getHeatEnergyDiscount() { + return isUpgrade83Unlocked ? 0.92 : 0.95; } public void setPlasmaTier(int tier) { diff --git a/src/main/java/tectech/util/GodforgeMath.java b/src/main/java/tectech/util/GodforgeMath.java index a03dce248a..c11a71be02 100644 --- a/src/main/java/tectech/util/GodforgeMath.java +++ b/src/main/java/tectech/util/GodforgeMath.java @@ -117,7 +117,7 @@ public class GodforgeMath { } } - module.setSpeedBonus((float) speedBonus); + module.setSpeedBonus(speedBonus); } public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForgeOfGods godforge) { diff --git a/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java b/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java index fab64446e2..d6bbea4308 100644 --- a/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java +++ b/src/test/java/gregtech/overclock/GT_OverclockCalculator_UnitTest.java @@ -5,10 +5,15 @@ import static gregtech.api.enums.GTValues.VP; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.function.Function; +import java.util.stream.Stream; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; import gregtech.api.util.OverclockCalculator; class GT_OverclockCalculator_UnitTest { @@ -252,7 +257,7 @@ class GT_OverclockCalculator_UnitTest { long correctConsumption = (long) Math.ceil(VP[1] * 0.9f) << 10; OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setEUtDiscount(0.9f) + .setEUtDiscount(0.9) .setDuration(1024) .calculate(); assertEquals(1024 / Math.pow(2, 5), calculator.getDuration(), messageDuration); @@ -264,7 +269,7 @@ class GT_OverclockCalculator_UnitTest { long correctConsumption = (long) Math.ceil(VP[1] * 0.9f) << 10; OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setEUtDiscount(0.9f) + .setEUtDiscount(0.9) .setDuration(1024) .enablePerfectOC() .calculate(); @@ -276,7 +281,7 @@ class GT_OverclockCalculator_UnitTest { void imperfectOCWithSpeedBoost_Test() { OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setSpeedBoost(0.9f) + .setSpeedBoost(0.9) .setDuration(1024) .calculate(); assertEquals((int) (1024 * 0.9f / Math.pow(2, 5)), calculator.getDuration(), messageDuration); @@ -287,7 +292,7 @@ class GT_OverclockCalculator_UnitTest { void perfectOCWithSpeedBoost_Test() { OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setSpeedBoost(0.9f) + .setSpeedBoost(0.9) .setDuration(2048) .enablePerfectOC() .calculate(); @@ -321,7 +326,7 @@ class GT_OverclockCalculator_UnitTest { void oneTickDiscountImperfectOC_Test() { OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setSpeedBoost(1.1f) + .setSpeedBoost(1.1) .setDuration(4) .setOneTickDiscount(true) .calculate(); @@ -347,7 +352,7 @@ class GT_OverclockCalculator_UnitTest { void oneTickDiscountPerfectOC_Test() { OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[1]) .setEUt(V[6]) - .setSpeedBoost(1.1f) + .setSpeedBoost(1.1) .setDuration(16) .enablePerfectOC() .setOneTickDiscount(true) @@ -375,7 +380,7 @@ class GT_OverclockCalculator_UnitTest { long correctConsumption = (long) Math.ceil((VP[0] << 10) * 0.9f); OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[0]) .setEUt(V[6]) - .setEUtDiscount(0.9f) + .setEUtDiscount(0.9) .setDuration(1024) .calculate(); assertEquals(1024 / Math.pow(2, 5), calculator.getDuration(), messageDuration); @@ -387,7 +392,7 @@ class GT_OverclockCalculator_UnitTest { long correctConsumption = (long) Math.ceil((VP[0] << 6) * 14 * 0.9f); OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(VP[0]) .setEUt(V[5]) - .setEUtDiscount(0.9f) + .setEUtDiscount(0.9) .setParallel(14) .setDuration(1024) .calculate(); @@ -424,7 +429,7 @@ class GT_OverclockCalculator_UnitTest { .setParallel(56) .setAmperage(1) .setAmperageOC(true) - .setSpeedBoost(1f / 6.01f) // If we set this to 1/6 we will get 11 overclocks because of float imprecision. + .setSpeedBoost(1 / 6.0) .setEUt(V[14] * 1_048_576) .setDuration(56) .setCurrentParallel(6144) @@ -661,4 +666,33 @@ class GT_OverclockCalculator_UnitTest { assertEquals(600, calculator.getDuration(), messageDuration); assertEquals(614400, calculator.getConsumption(), messageEUt); } + + static Stream<Arguments> noFloatImprecisionIssueParameters() { + return Stream.of( + // result using float + Arguments.arguments(1 / 2.25f, 0.9f, 42_467_327), + // result using double + Arguments.arguments(1 / 2.25, 0.9, 42_467_328)); + } + + @ParameterizedTest + @MethodSource("noFloatImprecisionIssueParameters") + void floatPrecisionIssues(double speedBoost, double eutDiscount, int expectedEUt) { + // See https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/17207 + // Using centrifuge recipe: Black Granite dust + // in an Industrial Centrifuge under UMV power + long machineVoltage = V[12]; + int maxParallel = 6 * GTUtility.getTier(machineVoltage); + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(10) + .setEUt(machineVoltage) + .setDuration(20 * 20) + .setSpeedBoost(speedBoost) + .setEUtDiscount(eutDiscount) + .setParallel(maxParallel); + double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); + maxParallel = GTUtility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); + calculator.setCurrentParallel(maxParallel) + .calculate(); + assertEquals(expectedEUt, calculator.getConsumption()); + } } |