1705 shaares
869 private links
869 private links
5 results
tagged
calculator
How can a calculator program perform an exact calculation involving arithmetic operations, roots, trigonometric functions, etc? It's a difficult task. Here is how it can be done.
- rational type: bignum for both nom and denom
- recursive real arithmetic (RRA):
- represent a real number as a computation that maps from a precision value (a rational) to the rational result etc.
- for composite expression, compute the precision value needed for each of its components (e.g. for 2pi to be shown with a precision of 0.01, pi needs to be calculated to 0.005 precision)
- determine the exact equality between RRA
- undecidable but decidable for a finite set of ops (proven by Dan Richardson, 1994), but slow
- the optimization
- represent every number as an exact rational times a RRA. (e.g. (3/2)pi)
- hard code the common types of RRA (sin, log, ..) whose identity can be checked directly.
- for uncommon types of RRA, just store RRA (e.g. pi * sqrt(2))
the result: the digits shown on screen are always 100% correct. 99% of calculation gets perfect UX.
A convenient calculator for total bytes written. In short, it is calculated by multiplying Total_LBAs_Written with the sector size (512B or 4KB). Both info can be retrieved using smartctl.
~# smartctl /dev/ada0 --all |grep "Sector Size"
Sector Size: 512 bytes logical/physical
~# smartctl /dev/ada0 --all | grep Total_LBAs_Written
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 25351376107