The formula for these 3 stats are as followed
Damage % reduction = Armor / ( Armor + 6500 ) * 100%Block:
Blocked % = Block / ( Block + 721 ) * 100%Resistance:
Damage % reduction = Resistance / ( Resistance + 600 ) * 100%
As you can see they all look pretty similar.
The diminishing return might seem harsh but if you look at your survivability the diminishing return isn't as bad as it looks.
For example if you have 5000 armor and go to 6000 armor you go from 43.5% to 48% so a 4.5% increase. Now if you go from 10000 armor to 11000 armor you go from 60.6% to 62.9% only a 2.3% increase.
This will only go lower and lower the more armor you have.
However the amount of damage you actually take scales a lot better (some say it stays the same however this is not true there is still a diminishing return just not as bad).
Lets go back to those examples and say you take a hit that would to 10000 damage at 0 armor.
At 5000 armor you take 5650 damage and at 6000 you take 5200 damage.
That's (5650-5200)/5650*100=7.96% less damage taken from the original 5650 hit.
Now at 10000 armor you take 3940 damage and at 11000 you take 3710 damage.
That's (3940-3710)/3940*100=5.84% less damage taken from the original 3940 hit.
As you can see the actually damage you take has a far lower diminishing return but it still exists and they work the same way for blocked amount and resistance.
A easy way to think about this that has been said before is this:
If you go from 0% reduction to 1% reduction you now take 1% less damage.
If you go from 50% reduction to 51% reduction you now actually take 2% less damage.
If you go from 75% reduction to 76% reduction you now actually take 4% less damage.
And if you go from 98% reduction to 99% reduction you now actually take 50% less damage.
If you got any question about this part feel free to ask them in the comments or on the official forums.