3 ms·
I've seen that kind of rounding error in code that went through emscripten. The initial C++ code predated std::log10 so it was implemented using a change of ba
by etimberg 6y ago
I've seen that kind of rounding error in code that went through emscripten.
The initial C++ code predated std::log10 so it was implemented using a change of base, i.e. log(value)/log(10). When this was translated into Javascript, it was as Math.log(value) / Math.log(10) which rounds to 64 bits each step of the way. In this particular calculation, this caused error to build up over time.
Replacing the C++ code with std::log10 translated into Javascript as Math.log10 and since the browsers natively implemented that, the values would stay in registers and only round once.