I have no idea where the limit is for calculations, though I would advise against using it, as it would either loop or behave erratically, rather than remain stuck at the lowest possible value. Rough experimentation with decrease by 999, increase by 99, yields 1 as a result. It stores negative values. Anyway, to get around this, I recommend making a simple loop. This loop would check if the stat is higher/lower/same as the target value, by comparing two variables: one, the passed in target, and two, a variable set to the hero's stat of choice. If the stat is higher than target, increase target, if lower, decrease, if same, break out of the loop. You'd need six separate loops, but that's not so bad, is it?
Let me know if that makes no sense.