Zealint писал(а):
Yoda писал(а):
Опять же, я не вижу способа решить эту проблему полностью, она носит фундаментальный характер. В любом представлении с фиксированным количеством значащих разрядов мы либо ограничиваем диапазон, либо ограничиваем точность, но не можем получить и то и другое сразу.
Вот поэтому в любых специальных задачах пишется своя специальная арифметика.
Да, действительно. Однако, здесь есть две тонкости, которые надо учитывать.
1.
Никакие объекты в машине Тьюринга не могут являться аналогами действительных чисел, т.к. для адекватного представления трансцедентных чисел потребуется бесконечная память, а точное представление алгебраических чисел уже обременено такими проблемами, что лучше от него отказаться.
2. Можно (и в ряде случаев даже нужно) конечно изобретать свои структуры, но нужно помнить, что это как правило сопряжено с потерей скорости или простоты. Поэтому когда объём планируемых расчётов значителен или создание своих структур нецелесообразно по трудозатратам, следует провести анализ применимости плавающей арифметики, математический анализ устойчивости и погрешности алгоритмов, а затем... смело пользоваться предложенным механизмом.
Freeman писал(а):
По одной из ссылок про страшилки IEEE754...
Я вот наблюдаю занятную картину. Некоторые люди, наступившие на серьёзные грабли, начинают проклинать инструмент и говорить о его неприменимости и даже вредоносности. Так, периодически слышна яростная критика объектно ориентированного программирования, включая отсылки на то, что сам Александр Степанов, создатель STL, разочаровался в ООП. Ровно в ту же область я отношу и критику плавающей арифметики, причём в данном случае вообще сталкиваемся с какой-то странной подменой понятий. Весь гнев в интернете обрушен именно на стандарт IEEE 754, при этом неявно подразумевается, что существуют некие альтернативные представления, которые лишены недостатков, а злая компания Intel прогнула весь мир. Да-да, некоторые почти не стесняясь сравнивают IEEE 754 с проникновением дьявола в наш мир. Но на самом деле именно этот стандарт является наиболее надёжным и вменяемым, и огромное спасибо Интелу, что смогли убедить комитет в том, что можно обеспечить приемлемую скорость для реализации всех защитных механизмов, заложенных в драфт. Если бы не Интел, самолёты падали бы чаще.
Теперь по поводу граблей. Если кто-то попадает в серьёзную аварию, это не означает, что автомобили – это зло. Это означает, что нужно тщательно учить и соблюдать правила дорожного движения и следить за исправностью транспортного средства. И применять их там, где это нужно. От взломов люди страдают гораздо больше, чем от ошибок плавающей арифметики. Поэтому сейчас никому не придёт в голову доверить вопрос разработки системы безопасности банка человеку, который знаком с криптографией лишь понаслышке и не имеет высшего профильного образования. Вместе с тем, мир не откажется от использования банковских услуг или интернет-платежей. Точно так же, отказ от плавающей арифметики означает или возврат в каменный век или неявно подразумевает существование альтернативы. Однако, разумной альтернативы пока никто не предложил (и вряд ли предложит). Поэтому если вы проектируете самолёт или дыхательный аппарат, то надо готовить специалистов и использовать только их, а не ругать IEEE.