Not better necessarily, but you could use a switch for the second part:
if(n <= 5, 0.5, switch(n, 6, 0.6, 7, 0.7, 8, 0.8, 9, 0.9, 10, 1.1, 11, 1.1, 12, 1.3, 13, 1.3, 14, 1.5, 15, 1.5, 16, 1.8, 17, 1.8, 18, 1.8 ))
Making the whole formula:
switch(r,1,15,2,12,3,10,4,8,5,7,6,6,7,5,8,4,9,3,10,2,11,2,12,2,13,2,1) * if(n <= 5, 0.5, switch(n, 6, 0.6, 7, 0.7, 8, 0.8, 9, 0.9, 10, 1.1, 11, 1.1, 12, 1.3, 13, 1.3, 14, 1.5, 15, 1.5, 16, 1.8, 17, 1.8, 18, 1.8 ))
Functionally these are the same, so it doesn't matter which you use.
When I finally get back to feature enhancements, I plan to add a tool to create a formula from a table. It's really simple and will make creating formulas from pre-defined values a lot easier.
I'm also adding the function lswitch right now, for linear switch. Since most of the uses of the switch() function involve linear lists of values, it can be simplified by not specifying the index. For example:
switch(rank, 1, 20, 2, 17, 3, 12, 4, 6, 5, 4, 3, 2, 2, 1, 0)
would become
lswitch(rank, 20, 17, 12, 6, 4, 2, 1, 0)