Skip to content

buffer: optimize readDouble and readFloat methods

Compute the floating point number in JavaScript to avoid having to call out to the C++ runtime. The improvements are not insubstantial:

                                                         improvement confidence      p.value
value="big" endian="BE" type="Double" noAssert="false"      292.86 %        *** 1.688367e-08
value="big" endian="BE" type="Double" noAssert="true"       353.19 %        *** 6.079414e-10
value="big" endian="BE" type="Float" noAssert="false"       406.21 %        *** 1.730122e-07
value="big" endian="BE" type="Float" noAssert="true"        450.81 %        *** 6.909242e-07
value="big" endian="LE" type="Double" noAssert="false"      268.39 %        *** 8.625486e-09
value="big" endian="LE" type="Double" noAssert="true"       310.66 %        *** 2.798332e-15
value="big" endian="LE" type="Float" noAssert="false"       382.99 %        *** 3.412057e-07
value="big" endian="LE" type="Float" noAssert="true"        394.60 %        *** 1.406742e-07
value="inf" endian="BE" type="Double" noAssert="false"      312.91 %        *** 7.407943e-12
value="inf" endian="BE" type="Double" noAssert="true"       392.47 %        *** 3.821179e-08
value="inf" endian="BE" type="Float" noAssert="false"       466.01 %        *** 8.953363e-08
value="inf" endian="BE" type="Float" noAssert="true"        460.76 %        *** 5.381256e-09
value="inf" endian="LE" type="Double" noAssert="false"      279.50 %        *** 2.390682e-09
value="inf" endian="LE" type="Double" noAssert="true"       335.30 %        *** 3.587173e-09
value="inf" endian="LE" type="Float" noAssert="false"       439.77 %        *** 1.057133e-07
value="inf" endian="LE" type="Float" noAssert="true"        426.72 %        *** 4.353408e-09
value="nan" endian="BE" type="Double" noAssert="false"      271.18 %        *** 2.281526e-05
value="nan" endian="BE" type="Double" noAssert="true"       312.63 %        *** 1.974975e-07
value="nan" endian="BE" type="Float" noAssert="false"       429.17 %        *** 2.416228e-07
value="nan" endian="BE" type="Float" noAssert="true"        461.39 %        *** 1.956714e-08
value="nan" endian="LE" type="Double" noAssert="false"      267.03 %        *** 9.938479e-12
value="nan" endian="LE" type="Double" noAssert="true"       276.93 %        *** 7.842481e-08
value="nan" endian="LE" type="Float" noAssert="false"       415.97 %        *** 8.082710e-07
value="nan" endian="LE" type="Float" noAssert="true"        433.68 %        *** 1.030200e-07
value="small" endian="BE" type="Double" noAssert="false"    273.20 %        *** 9.071652e-11
value="small" endian="BE" type="Double" noAssert="true"     326.25 %        *** 3.120167e-08
value="small" endian="BE" type="Float" noAssert="false"     845.61 %        *** 8.044170e-08
value="small" endian="BE" type="Float" noAssert="true"      868.61 %        *** 2.944539e-08
value="small" endian="LE" type="Double" noAssert="false"    251.29 %        *** 5.613930e-09
value="small" endian="LE" type="Double" noAssert="true"     286.82 %        *** 8.149603e-10
value="small" endian="LE" type="Float" noAssert="false"     824.87 %        *** 1.199729e-08
value="small" endian="LE" type="Float" noAssert="true"      834.35 %        *** 4.799620e-08
value="zero" endian="BE" type="Double" noAssert="false"     216.70 %        *** 3.872293e-12
value="zero" endian="BE" type="Double" noAssert="true"      239.31 %        *** 6.439601e-09
value="zero" endian="BE" type="Float" noAssert="false"      353.75 %        *** 3.639974e-07
value="zero" endian="BE" type="Float" noAssert="true"       388.86 %        *** 7.074318e-10
value="zero" endian="LE" type="Double" noAssert="false"     179.34 %        *** 5.230763e-06
value="zero" endian="LE" type="Double" noAssert="true"      199.66 %        *** 2.177589e-11
value="zero" endian="LE" type="Float" noAssert="false"      299.55 %        *** 9.961978e-08
value="zero" endian="LE" type="Float" noAssert="true"       333.30 %        *** 2.470764e-08

CI: https://ci.nodejs.org/job/node-test-commit/14968/

Merge request reports

Loading