Недавно я натолкнулся на предмет точной реальной арифметики после прочтения этой статьи и этот документ.
Я нашел ряд работ, в которых обсуждаются реализации точной арифметики с использованием сигнальных потоков. Использование бесконечных потоков для произвольной точности приводит к хорошим практическим реализациям на функциональных языках, таких как Haskell, с использованием ленивых списков. Тем не менее, документы, в которых обсуждаются такие реализации на функциональных языках, похоже, пришли к выводу, что производительность очень плохая.
Теперь я понимаю, что точные, не-аппаратные реализации, как правило, имеют относительно низкую производительность по сравнению со стандартным представлением с плавающей запятой, но я заинтересован в обеспечении более эффективной реализации на императивном языке (в частности, на С++) и сбор операций/функций (арифметические операции, тригонометрические функции, exp, log и т.д.).
Мой вопрос (ы): есть ли что-то по своей сути медленное в представлении с подписанным знаком/ленивым потоком, которое вызывает плохую производительность, или это Haskell? Что это мешает? Можно ли реализовать представление знакового символа с использованием ленивых потоков на С++, который обеспечивает (значительно) лучшую производительность, чем его коллега Haskell, или это упражнение бесполезно? Возможно, реконструировать как итерации?
Я знаю, существует две библиотеки С++, RealLib и iRRAM, которые обеспечивают эффективное вычисление реальных чисел. Однако они, похоже, используют интервальную арифметику, представляющую действительные числа как сокращающиеся вложенные интервалы, которые не кажутся "чистыми" подходами как бесконечные потоки (пожалуйста, исправьте меня, если вы не согласны!). Но, возможно, это единственные подходы, которые достигают хорошей эффективности?
Любой ввод оценивается!