Created SC2017 (markdown)

koalaman
2015-05-09 11:53:26 -07:00
parent 23109aebbf
commit 8315e70304

21
SC2017.md Normal file

@@ -0,0 +1,21 @@
## Increase precision by replacing a/b*c with a*c/b.
### Problematic code:
percent=$((count/total*100))
### Correct code:
percent=$((count*100/total))
### Rationale:
If integer division is performed before multiplication, the intermediate result will be truncated causing a loss of precision.
In this case, if `count=1` and `total=2`, then the problematic code results in `percent=0`, while the correct code gives `percent=50`.
### Exceptions:
If you want and expect truncation you can ignore this message.
ShellCheck doesn't warn when `b` and `c` are identical expressions, e.g. `a/10*10`, under the assumption that the intent is to rounded to the nearest 10 rather than the no-op of multiply by `1`.