flang компилятор доказывает, что программа не зациклится 0.6.2 GitHub

Языку нужны три типа чисел с разными гарантиями

ТипЧто этоЗаконыДля чего
числоIEEE-754 doubleникакихфизика, графика, статистика
сотых, тысячныхцелое число минорных единицмоноид, ассоциативностьденьги, счета, отчётность
дробьчислитель / знаменательвсё выше + точное делениематематика, где нужна точность

Так сделано во всех серьёзных языках. Обычные дробные нужны, потому что быстрые и стандартные: для физики ошибка в пятнадцатом знаке не важна. Для денег они не годятся ни в одном языке.

Чем отличается наш случай. Ядро проверяет, что взят правильный тип. Моноид над точными копейками собирается: 5 значений, 125 троек, нарушений нет. Тот же моноид над число не собирается вовсе, и отказ называет вход:

FLANG_MONOID_ASSOC: на 0.1, 0.1, 0.6
  слева  вышло 0.8
  справа вышло 0.7999999999999999

Честная оговорка. Коммутативность язык не проверяет — её нет в объявлении моноида, и обещать её было бы неправдой. Работа по добавлению запущена.

Связано: exact-decimals-are-free, double-has-no-laws, infinity-is-legal-without-subtraction