c# - Unexpected decimal value behavior -
i used think understand difference between decimal , double values, i'm not able justify behavior of code snippet.
i need divide difference between 2 decimal numbers in intervals, example:
decimal minimum = 0.158; decimal maximum = 64.0; decimal delta = (maximum - minimum) / 6; // 10.640333333333333333333333333 then create intervals in reverse order, first result unexpected:
for (int = 5; >= 0; i--) { interval interval = new interval(minimum + (delta * i), minimum + (delta * (i + 1)); } {53.359666666666666666666666665, 63.999999999999999999999999998} i expect maximum value 64. missing here?
thank much!
edit: if use double instead of decimal seems works properly!
you're not missing anything. result of rounding numbers multiple times internally, i.e. compounding loss of precision. delta, begin with, isn't 10.640333333333333333333333333, 3s keep repeating endlessly, resulting in loss of precision when multiply or divide using decimal.
maybe instead:
for (decimal = maximum; >= delta; -= delta) { interval interval = new interval(i - delta, i); }
Comments
Post a Comment