> 
VP := Vector[row](16, {(1) = 10, (2) = 177.9780267, (3) = 355.9560534, (4) = 533.9340801, (5) = 711.9121068, (6) = 889.8901335, (7) = 1067.868160, (8) = 1245.846187, (9) = 1423.824214, (10) = 1601.802240, (11) = 1779.780267, (12) = 1957.758294, (13) = 2135.736320, (14) = 2313.714347, (15) = 2491.692374, (16) = 2669.670400}):

> 
VE := Vector[row](16, {(1) = 5.444193931, (2) = .4793595141, (3) = .3166653569, (4) = .2522053489, (5) = .2123038784, (6) = .1822258228, (7) = .1544240625, (8) = .1277082078, (9) = .1055351619, (10) = 0.8639065510e1, (11) = 0.6936612570e1, (12) = 0.5388339810e1, (13) = 0.3955702170e1, (14) = 0.2612014630e1, (15) = 0.1338216460e1, (16) = 0.1203297900e2}):

> 
oldDigits,Digits := Digits,10: #oldDigits,Digits := Digits,13: # this might be adequate to find 15 roots at Digits=10 forget(evalf); for i to 15 do p[i] := VE[i+1] < x and x <= VE[i], (VP[i+1]VP[i])*(xVE[i])/(VE[i+1]VE[i])+VP[i] end do: Digits := oldDigits: forget(evalf);

> 
g := unapply(piecewise(seq(p[i], i = 1 .. 15)), x):

> 
forget(evalf); evalf[8]( g(0.026120146)  VP[14] );

0.0001
> 
forget(evalf); evalf[7]( g(0.02612015)  VP[14] );

0.
> 
for i to 15 do forget(evalf); print(proc(j) local res; res:=fsolve(g(x) = VP[j]); if res::numeric then res else j end if; end proc(i)); end do; forget(evalf);

5.444193930 0.4793595141 0.3166653569 4 0.2123038784 0.1822258228 7 0.1277082078 9 0.08639065507 11 0.05388339812 0.03955702173 14 0.01338216464
> 
oldDigits,Digits := Digits,100: forget(evalf); plot([VP[14],g(x)], x=0.0261201462..0.0261201464, discont, gridlines=false); Digits := oldDigits: forget(evalf);

> 
oldDigits,Digits := Digits,6: for i to 15 do forget(evalf); print(proc(j) local res; res:=fsolve(g(x) = VP[j]); if res::numeric then res else j end if; end proc(i)) end do; Digits := oldDigits: forget(evalf);

5.44419 0.479360 0.316665 0.252205 0.212304 0.182226 0.154424 0.127708 0.105535 0.0863907 0.0693661 0.0538834 0.0395570 0.0261201 0.0133822
> 
oldDigits,Digits := Digits,12: # still not a good enough construction forget(evalf); for i to 15 do p[i] := VE[i+1] < x and x <= VE[i], (VP[i+1]VP[i])*(xVE[i])/(VE[i+1]VE[i])+VP[i] end do: Digits := oldDigits: forget(evalf);

> 
g := unapply(piecewise(seq(p[i], i = 1 .. 15)), x):

> 
for i to 15 do forget(evalf); print(proc(j) local res; res:=fsolve(g(x) = VP[j]); if res::numeric then res else j end if; end proc(i)); end do; forget(evalf);

5.444193931 0.4793595141 0.3166653569 0.2522053489 0.2123038784 0.1822258228 0.1544240625 0.1277082078 0.1055351619 0.08639065510 11 0.05388339810 0.03955702170 0.02612014630 0.01338216460
> 
oldDigits,Digits := Digits,100: forget(evalf); plot([VP[11],g(x)], x=0.69366125699e1..0.69366125701e1, discont, gridlines=false); Digits := oldDigits: forget(evalf);

> 
oldDigits,Digits := Digits,13: # adequate in 64bit Maple 2015 on Linux forget(evalf); for i to 15 do p[i] := VE[i+1] < x and x <= VE[i], (VP[i+1]VP[i])*(xVE[i])/(VE[i+1]VE[i])+VP[i] end do: Digits := oldDigits: forget(evalf);

> 
g := unapply(piecewise(seq(p[i], i = 1 .. 15)), x):

> 
for i to 15 do forget(evalf); print(proc(j) local res; res:=fsolve(g(x) = VP[j]); if res::numeric then res else j end if; end proc(i)); end do; forget(evalf);

5.444193931 0.4793595141 0.3166653569 0.2522053489 0.2123038784 0.1822258228 0.1544240625 0.1277082078 0.1055351619 0.08639065510 0.06936612570 0.05388339810 0.03955702170 0.02612014630 0.01338216460
