Skip to content

Instantly share code, notes, and snippets.

@JobLeonard
Last active August 21, 2026 11:45
Show Gist options
  • Select an option

  • Save JobLeonard/2eb56ef535b27d39676b9241aa42c960 to your computer and use it in GitHub Desktop.

Select an option

Save JobLeonard/2eb56ef535b27d39676b9241aa42c960 to your computer and use it in GitHub Desktop.
Math.sumPrecise() vs Array.prototype.reduce() vs for-loop
{"title":"Math.sumPrecise() vs Array.prototype.reduce() vs for-loop","initialization":"// Obviously, assumes precision is not something to worry about\n\nconst input = [];\nfor (let i = 0; i < 10000; i++) {\n input[i] = Math.random();\n}\n// ensures the calculation isn't optimized away\nlet output = -0.0;\n\nfunction sum(accumulator, currentValue) {\n return accumulator + currentValue;\n}","setup":"for (let i = 0, {random} = Math; i < input.length; i++) {\n input[i] = 1 + random();\n}","tests":[{"name":"for-loop","code":"let acc = -0.0;\nfor (let i = 0; i < input.length; i++) {\n acc += input[i];\n}\noutput = acc;","results":{"aborted":false,"count":6646,"cycles":6,"hz":84166.25961743327,"stats":{"moe":7.028362339770378e-8,"rme":0.5915509693745045,"sem":3.585899152944071e-8,"deviation":2.891044323044054e-7,"mean":0.000011881245579230552,"variance":8.358137277805251e-14,"numSamples":65},"times":{"cycle":0.07896275811956625,"elapsed":71.977,"period":0.000011881245579230552,"timeStamp":1787312571931}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:154.0) Gecko/20100101 Firefox/154.0":{"aborted":false,"count":6601,"cycles":5,"hz":66402.79071466374,"stats":{"moe":5.262973824901102e-7,"rme":3.4947614943166116,"sem":2.685190726990358e-7,"deviation":0.0000020449803322728324,"mean":0.000015059608026070052,"variance":4.181944559382705e-12,"numSamples":58},"times":{"cycle":0.09940847258008842,"elapsed":6.041,"period":0.000015059608026070052,"timeStamp":1787312536525}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36":{"aborted":false,"count":6646,"cycles":6,"hz":84166.25961743327,"stats":{"moe":7.028362339770378e-8,"rme":0.5915509693745045,"sem":3.585899152944071e-8,"deviation":2.891044323044054e-7,"mean":0.000011881245579230552,"variance":8.358137277805251e-14,"numSamples":65},"times":{"cycle":0.07896275811956625,"elapsed":71.977,"period":0.000011881245579230552,"timeStamp":1787312571931}}}},{"name":"Array.prototype.reduce()","code":"output = input.reduce(sum);","results":{"aborted":false,"count":976,"cycles":2,"hz":7077.5924583031165,"stats":{"moe":0.00000536345581798291,"rme":3.7960354447797813,"sem":0.000002736457049991281,"deviation":0.000017306873994395387,"mean":0.00014129098360655742,"variance":2.9952788745787934e-10,"numSamples":40},"times":{"cycle":0.13790000000000005,"elapsed":41.171,"period":0.00014129098360655742,"timeStamp":1787312644828}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:154.0) Gecko/20100101 Firefox/154.0":{"aborted":false,"count":2997,"cycles":4,"hz":38195.50582577635,"stats":{"moe":2.4686617747778825e-7,"rme":0.9429178520039999,"sem":1.259521313662185e-7,"deviation":0.0000010154585470220118,"mean":0.00002618109063829041,"variance":1.0311560607200551e-12,"numSamples":65},"times":{"cycle":0.07846472864295637,"elapsed":5.985,"period":0.00002618109063829041,"timeStamp":1787312542572}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36":{"aborted":false,"count":976,"cycles":2,"hz":7077.5924583031165,"stats":{"moe":0.00000536345581798291,"rme":3.7960354447797813,"sem":0.000002736457049991281,"deviation":0.000017306873994395387,"mean":0.00014129098360655742,"variance":2.9952788745787934e-10,"numSamples":40},"times":{"cycle":0.13790000000000005,"elapsed":41.171,"period":0.00014129098360655742,"timeStamp":1787312644828}}}},{"name":"Math.sumPrecise()","code":"output = Math.sumPrecise(input);\n","results":{"aborted":false,"count":1636,"cycles":3,"hz":20983.098869991496,"stats":{"moe":8.5386293656553e-7,"rme":1.7916690419375794,"sem":4.3564435539057655e-7,"deviation":0.0000032013191400918206,"mean":0.00004765740304594034,"variance":1.0248444236718233e-11,"numSamples":54},"times":{"cycle":0.0779675113831584,"elapsed":58.078,"period":0.00004765740304594034,"timeStamp":1787312686828}},"platforms":{"Mozilla/5.0 (X11; Linux x86_64; rv:154.0) Gecko/20100101 Firefox/154.0":{"aborted":false,"count":976,"cycles":2,"hz":6005.625879043601,"stats":{"moe":0.0000024274508901550066,"rme":1.4578361886022333,"sem":0.0000012384953521199013,"deviation":0.0000073270373141393885,"mean":0.00016651053864168616,"variance":5.368547580279094e-11,"numSamples":35},"times":{"cycle":0.1625142857142857,"elapsed":5.973,"period":0.00016651053864168616,"timeStamp":1787312548562}},"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36":{"aborted":false,"count":1636,"cycles":3,"hz":20983.098869991496,"stats":{"moe":8.5386293656553e-7,"rme":1.7916690419375794,"sem":4.3564435539057655e-7,"deviation":0.0000032013191400918206,"mean":0.00004765740304594034,"variance":1.0248444236718233e-11,"numSamples":54},"times":{"cycle":0.0779675113831584,"elapsed":58.078,"period":0.00004765740304594034,"timeStamp":1787312686828}}}}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment