4 ms·
I.e., use a double parameter that specifies seconds, instead of an uint32_t that specifies milliseconds. This can have surprising and sometimes unpleasant cons
by mwcremer 7y ago
I.e., use a double parameter that specifies seconds, instead of an uint32_t that specifies milliseconds.
This can have surprising and sometimes unpleasant consequences; see https://0.30000000000000004.com https://0.30000000000000004.com
- United857 7y agoBetter yet, use std::chrono. Yes, it's C++. But this is an example of how properly applied bits from C++ can make things easier to reason about and type-safe, rather than "let's avoid C++ as much as possible". No ambiguity for the programmer as to what the underlying units are, and no unnecessary int/float conversions. All the book-keeping and conversions are taken care of by the compiler with zero run-time size or perf overhead.
- flohofwoe 7y agostd::chrono is a terribly overengineered API even for the STL, and many game companies have banned parts or all of the STL for good reasons (usually not std::chrono related though). Using an uint64_t (instead of uint32_t or double) to carry "opaque ticks", and a handful conversion function to convert to real-world time units is fine and just a few lines of code.
- niklasgray 7y agoThis is exactly what we do.
- chrisseaton 7y agoWhat practical problems do you think this could cause in specifying or measuring time?
- bobdobbs666 7y agoThe patriot missile system tended to miss due to numerical error accumulated due to using floats to count time. http://www-users.math.umn.edu/~arnold//disasters/patriot.html http://www-users.math.umn.edu/~arnold//disasters/patriot.htm...
- chrisseaton 7y ago> due to using floats No they weren't using floats. The article you've linked to says this really clearly. > This calculation was performed using a 24 bit fixed point register
- bobdobbs666 7y agohttp://www.cs.unc.edu/~smp/COMP205/LECTURES/ERROR/lec23/node4.html http://www.cs.unc.edu/~smp/COMP205/LECTURES/ERROR/lec23/node... They meant fixed precision not fixed point math.
- boterock 7y agoit would still be an offset much less than the loss of precision by storing int milliseconds. There are also some techniques for dealing with the time inaccuracies, although I feel those aren't widely known.