13 static const double ranges[5][11] = {
14 {-6.404, -3.554, -121.47164, -4.1790858, 36.069513, 30.722076, 7.791386, 0.52593997,
15 0.93939547, 0.2779128, 0.02516334},
16 {-3.554, 4.096, -8.7935962, -0.34489914, 25.678719, -0.49887904, -0.44705222, -0.044869202,
17 0.00023893439, -0.02039775, -0.0018424107},
18 {4.096, 16.397, 310.18976, 12.631386, 24.061949, 4.0158622, 0.26853917, -0.0097188544,
19 0.16995872, 0.011413069, -0.00039275155},
20 {16.397, 33.275, 605.72562, 25.148718, 23.539401, 0.046547228, 0.0134444, 0.0005923685,
21 0.00083445513, 0.0004612144, 0.00002548812},
22 {33.275, 69.553, 1018.4705, 41.99385, 25.783239, -1.8363403, 0.05617666, 0.000185324,
23 -0.074803355, 0.002384186, 0.0},
25 for (
const auto&
r : ranges) {
26 if (v_mv >=
r[0] && v_mv <=
r[1]) {
27 const double x = v_mv -
r[3];
28 const double num =
r[4] + x * (
r[5] + x * (
r[6] + x *
r[7]));
29 const double den = 1.0 + x * (
r[8] + x * (
r[9] + x *
r[10]));
30 if (std::abs(den) < 1e-20)
31 return std::numeric_limits<double>::quiet_NaN();
32 return r[2] + (x * num) / den;
35 return std::numeric_limits<double>::quiet_NaN();