Если вы выразите десятичное дробное число, например "###. 2", в двоичном дробном числе, это будет повторяющееся двоичное дробное число.
Это бесконечно повторяющееся, потому что 0.2 не может быть выражено как конечная (ограниченная) сумма двоичных цифр справа от «десятичной» точки. Первый бит обозначает 2 ^ (- 1) = 0,5, второй бит обозначает 2 ^ (- 2) = 0,25 и так далее. Попробуйте сами.
Если вы посмотрите на битовую комбинацию 5.25, она не будет повторяться.
Пожалуйста, прочитайте эти статьи: https://en.wikipedia.org/wiki/Fraction_(mathematics) и https://en.wikipedia.org/wiki/Repeating_decimal.
Поскольку double
имеет ограниченный размер, бесконечно повторяющееся число должно быть вырезано в некоторой точке. И поэтому в первом случае представление было округлено в меньшую сторону, а во втором случае оно было округлено в большую сторону.
Для получения дополнительной информации см. Когда мне следует использовать double вместо десятичной? даже для C #.