Much easier that what I posted (I changed the post so the original f-up isn't there).
This is the result for the dBm to float. Just a bit faster
. Just started on the other direction, which should be similar.
//For the 10^x in 256 steps, in reverse order since we work in negatives, it saves a subtraction
//step.
const float powTableFloat[257] = {10.0,9.9104585625,9.8217188919,9.7337738090,9.6466161991,9.5602390110,
9.4746352566,9.3897980105,9.3057204093,9.2223956510,9.1398169947,9.0579777594,8.9768713245,
8.8964911282,8.8168306678,8.7378834985,8.6596432336,8.5821035433,8.5052581544,8.4291008503,
8.3536254696,8.2788259063,8.2046961090,8.1312300806,8.0584218776,7.9862656097,7.9147554394,
7.8438855815,7.7736503024,7.7040439201,7.6350608034,7.5666953714,7.4989420933,7.4317954878,
7.3652501227,7.2993006144,7.2339416274,7.1691678741,7.1049741144,7.0413551549,6.9783058486,
6.9158210949,6.8538958387,6.7925250701,6.7317038241,6.6714271804,6.6116902624,6.5524882374,
6.4938163158,6.4356697510,6.3780438389,6.3209339175,6.2643353666,6.2082436072,6.1526541015,
6.0975623522,6.0429639024,5.9888543349,5.9352292723,5.8820843762,5.8294153471,5.7772179241,
5.7254878844,5.6742210428,5.6234132519,5.5730604013,5.5231584173,5.4737032629,5.4246909370,
5.3761174746,5.3279789459,5.2802714565,5.2329911468,5.1861341918,5.1396968008,5.0936752168,
5.0480657167,5.0028646106,4.9580682417,4.9136729859,4.8696752517,4.8260714794,4.7828581417,
4.7400317423,4.6975888167,4.6555259312,4.6138396827,4.5725266990,4.5315836376,4.4910071863,
4.4507940624,4.4109410125,4.3714448126,4.3323022674,4.2935102101,4.2550655025,4.2169650343,
4.1792057232,4.1417845144,4.1046983804,4.0679443211,4.0315193629,3.9954205589,3.9596449889,
3.9241897585,3.8890519993,3.8542288686,3.8197175493,3.7855152493,3.7516192015,3.7180266639,
3.6847349187,3.6517412725,3.6190430563,3.5866376245,3.5545223556,3.5226946515,3.4911519372,
3.4598916609,3.4289112936,3.3982083289,3.3677802831,3.3376246943,3.3077391230,3.2781211514,
3.2487683834,3.2196784443,3.1908489806,3.1622776602,3.1339621714,3.1059002236,3.0780895465,
3.0505278903,3.0232130250,2.9961427410,2.9693148482,2.9427271762,2.9163775741,2.8902639100,
2.8643840715,2.8387359648,2.8133175149,2.7881266654,2.7631613785,2.7384196343,2.7138994312,
2.6895987856,2.6655157314,2.6416483204,2.6179946216,2.5945527214,2.5713207234,2.5482967480,
2.5254789326,2.5028654312,2.4804544143,2.4582440689,2.4362325982,2.4144182213,2.3927991734,
2.3713737057,2.3501400846,2.3290965925,2.3082415268,2.2875732003,2.2670899410,2.2467900918,
2.2266720104,2.2067340691,2.1869746550,2.1673921696,2.1479850285,2.1287516618,2.1096905134,
2.0908000413,2.0720787172,2.0535250265,2.0351374682,2.0169145547,1.9988548119,1.9809567786,
1.9632190068,1.9456400616,1.9282185208,1.9109529750,1.8938420273,1.8768842936,1.8600784018,
1.8434229924,1.8269167179,1.8105582430,1.7943462442,1.7782794100,1.7623564406,1.7465760477,
1.7309369547,1.7154378963,1.7000776188,1.6848548794,1.6697684466,1.6548170999,1.6399996297,
1.6253148373,1.6107615346,1.5963385443,1.5820446995,1.5678788438,1.5538398313,1.5399265261,
1.5261378026,1.5124725453,1.4989296487,1.4855080172,1.4722065648,1.4590242156,1.4459599031,
1.4330125702,1.4201811697,1.4074646633,1.3948620224,1.3823722274,1.3699942677,1.3577271421,
1.3455698581,1.3335214322,1.3215808896,1.3097472643,1.2980195990,1.2863969449,1.2748783618,
1.2634629177,1.2521496891,1.2409377608,1.2298262257,1.2188141848,1.2079007474,1.1970850305,
1.1863661591,1.1757432659,1.1652154917,1.1547819847,1.1444419008,1.1341944035,1.1240386638,
1.1139738600,1.1039991779,1.0941138106,1.0843169582,1.0746078283,1.0649856354,1.0554496009,
1.0459989534,1.0366329284,1.0273507682,1.0181517217,1.0090350448,1.0000000000};
//Enough values for -170dBm, shifted + 1 since normal values are negative, but
//We look up in the positive realm. (4.472135955 is tossed representing 0)
const float powScalersFloat[16] = {44.72135955,447.2135955,4472.1359549996,
44721.3595499958,447213.595499958,4472135.954999579,44721359.5499958,447213595.499958,
4472135954.999579,4.4721359550e10,4.4721359550e11,4.4721359550e12,4.4721359550e13,
4.4721359550e14,4.4721359550e15};
/***********************************************************************************
** Converts from dBm65k (16.16 fixed point int) to volts as a float.
** Simplifies the formula of: Volts := .22360679774997896964 * sqrt(10^(dBm/10))
** to two divides (one int, one float) two lookups.
** only handles the range from 0 to -160dBm, not positives!
***********************************************************************************/
float fastPow10dBm(union dBm65kUnion dBm65k) {
float unscaled;
float scaler;
dBm65k.dBm /= -20; //Formula is sqrt(10^(x/10)) so divide by twenty, and convert to positive.
//sqrt(10^(x/10)) == 10^(x/20)
unscaled = powTableFloat[dBm65k.bytes.largerfrac]; //Ignore the lower fractional value during lookup
//We can increase accuracy (lowering poerformance) by
//Interpolating between the lookup value and the previous
//value in the table. No need found yet...
scaler = powScalersFloat[dBm65k.words.integer];
return unscaled / scaler;
}