private static float[] GetFishingChances(float multiplier)
var mediumModifier = 100f;
float[] result = new float[3]
void applyModifier(int idx, float modifier)
var newValue = result[idx] * (1f + modifier / 100f);
var diff = newValue - result[idx];
var sum = 100f - newValue;
for (int i = 0; i < idx; i++) result[i] = result[i] * (1 - diff / sum);
if (mediumModifier > 0f) applyModifier(1, mediumModifier);
if (largeModifier > 0f) applyModifier(2, largeModifier);
public static void Main()
var chances = GetFishingChances(0f);
Console.WriteLine(chances[0]);
Console.WriteLine(chances[1]);
Console.WriteLine(chances[2]);