I have played around in IGE, and I've discovered that fractional health from virtues isn't actually fractional. It only applies when fractions from that specific virtue reach the nearest whole number. Fractions from different fractional virtues do not add together.
First off, you'll notice that in the health breakdown the "health from Virtues" number is always a whole number. This could just be a rounded description, so I tested whether fractional health would cancel fractional unhealth. (Note, net health always rounds up in the player's favour.)
Say you have one city with 3 population, your health will be:
(1 x -4) + (3 x -0.75) + 9 base = -4 + -2.25 + 9 = 2.75 = 3
We would expect that adding 1 trade unit x 0.5 h would yield 3.25 and round up to 4. It doesn't; health stays at 3. Nor does 3 military units x 0.25h increase health to 4. It only increases when you add 2 trade units or 4 military units.
So the whole number health from virtues really does appear to be a whole number.
Next, fractional unhealth does not stack. So for example With Public Security (0.25h / military unit) and Profiteering (0.5h / trade unit), you would expect that 2 military units and 1 trade unit would add together to give you an additional 1 health. They do not. In order to get 1 health from either, you need either 4 military units or 2 trade units; the fractions don't add together.
Not only does Magnasanti not stack with other fractional virtues, it does not stack between cities. You only get 1 health from Magnasanti when you have 5 buildings in the same city. Also, the 1 health doesn't kick in until the turn after the 5th building is completed (though I can't confirm that since you don't actually build buildings in IGE).
This suggests that each virtue has its own counter towards whole health numbers, rather than actually adding fractional health. In Magnasanti's case, the counter is specific to each city.
TL;DR:
- Magnasanti is actually 1 health per 5 buildings in a city
- Public Security is actually 1 health per 4 military units
- Profiteering is actually 1 health per 2 trade units
Not sure this will significantly affect anyone's play, but if you see weird errors when you're between -1 and 1 that you can't figure out, this is probably why.
First off, you'll notice that in the health breakdown the "health from Virtues" number is always a whole number. This could just be a rounded description, so I tested whether fractional health would cancel fractional unhealth. (Note, net health always rounds up in the player's favour.)
Say you have one city with 3 population, your health will be:
(1 x -4) + (3 x -0.75) + 9 base = -4 + -2.25 + 9 = 2.75 = 3
We would expect that adding 1 trade unit x 0.5 h would yield 3.25 and round up to 4. It doesn't; health stays at 3. Nor does 3 military units x 0.25h increase health to 4. It only increases when you add 2 trade units or 4 military units.
So the whole number health from virtues really does appear to be a whole number.
Next, fractional unhealth does not stack. So for example With Public Security (0.25h / military unit) and Profiteering (0.5h / trade unit), you would expect that 2 military units and 1 trade unit would add together to give you an additional 1 health. They do not. In order to get 1 health from either, you need either 4 military units or 2 trade units; the fractions don't add together.
Not only does Magnasanti not stack with other fractional virtues, it does not stack between cities. You only get 1 health from Magnasanti when you have 5 buildings in the same city. Also, the 1 health doesn't kick in until the turn after the 5th building is completed (though I can't confirm that since you don't actually build buildings in IGE).
This suggests that each virtue has its own counter towards whole health numbers, rather than actually adding fractional health. In Magnasanti's case, the counter is specific to each city.
TL;DR:
- Magnasanti is actually 1 health per 5 buildings in a city
- Public Security is actually 1 health per 4 military units
- Profiteering is actually 1 health per 2 trade units
Not sure this will significantly affect anyone's play, but if you see weird errors when you're between -1 and 1 that you can't figure out, this is probably why.