Точная реальная арифметика и производительность ленивых списков в C ++ / Haskell

Недавно я столкнулся с предметом точной действительной арифметики после прочтения этой статьи и этой статьи .

I нашли ряд работ, в которых обсуждаются реализации точной арифметики с использованием потоков подписанных цифр. Использование бесконечных потоков для произвольной точности приводит к хорошим практическим реализациям на функциональных языках, таких как Haskell, с использованием ленивых списков. Однако документы, в которых обсуждаются такие реализации на функциональных языках, похоже, приходят к выводу, что производительность очень низкая.

Теперь я понимаю, что точные, неаппаратные реализации обычно будут иметь относительно низкую производительность по сравнению со стандартной плавающей запятой. представления, но я заинтересован в обеспечении более эффективной реализации на императивном языке (в частности, C ++) и в коллекции операций / функций (арифметические операции, тригонометрические функции, exp, log и т. д.).

Мой вопрос (ы) ) : есть ли что-то по своей сути медленное в представлении подписанных цифр / ленивом потоке, которое вызывает плохую производительность, или это Haskell? Что делает его медленным? Можно ли реализовать представление потока подписанных цифр с использованием ленивых потоков в C ++, которые обеспечивают (значительно) лучшую производительность, чем его аналог на Haskell, или это бесполезное упражнение? Возможно, реконструкция выполняется в виде итераций?

Я знаю, что существуют две библиотеки C ++, RealLib и iRRAM, которые обеспечивают эффективное вычисление действительных чисел. Однако они, похоже, используют интервальную арифметику, представляя действительные числа как сокращающиеся вложенные интервалы, что не кажется таким «чистым» подходом, как бесконечные потоки (пожалуйста, поправьте меня, если вы не согласны!). Но, может быть, это единственные подходы, которые обеспечивают хорошую эффективность?

Любой ввод приветствуется!

13
задан inquisitor 4 June 2011 в 12:49
поделиться