Я где-то читал, что существует источник недетерминированности в С-точке с двойной точностью:
-
В стандарте C говорится, что 64-битные поплавки (удваиваются) необходимы для получения только около 64-битной точности.
-
Аппаратное обеспечение может выполнять с плавающей запятой в 80-битных регистрах.
-
Из-за (1) компилятор C не требуется очищать младшие биты регистров с плавающей запятой, прежде чем набивать двойной бит в старшие разряды.
-
Это означает, что YMMV, т.е. могут иметь место небольшие различия в результатах.
Есть ли какая-то общая комбинация аппаратного и программного обеспечения, где это действительно происходит? Я вижу в других потоках, что .net имеет эту проблему, но C удваивает через gcc OK? (например, я проверяю сходимость последовательных приближений на основе точного равенства)