The formula is indeed like that. All variables below whose name starts with str come from data, I believe.

First you have:
Code
exponentialMultiplier = strVitalityExponentialGrowth^(level-1)


Then there are several levels at which the exponential curve changes:
Code
if level >= strFirstVitalityLeapLevel
  exponentialMultilier *= strFirstVatlityLeapGrowth / strVitalityExponentialGrowth

(same for second, third and fourth leap levels)

Then
Code
base = (strVitalityStartingAmount * exponentialMultiplier + strVitalityLinearGrowth) * level

Finally this value is indeed rounded to the closest multiple of 5 for pure aesthetic reasons.

Note that this is merely a snapshot in time of the formula. It's not even from the latest code version (don't have it handy), so it may have already changed in the mean time. It's just to give you an idea.