Есть ли идея решить проблему с плавающей точкой точности в будущем?

Мы не можем хранить десятичные числа с бесконечной точностью, но может быть какой-то способ представить их так же, как мы представляем бесконечные списки в haskell.

Первая идея пришла мне в голову - представить десятичное число с помощью чего-то похожего на Codata, чтобы для любого заданного натурального числа k мы могли вычислить десятичное число с точностью до k цифр.

Но есть некоторая очевидная проблема, подумайте о количестве a = 0.333... а также b = 0.666..., если мы добавим их вместе, мы получим ans = 0.999... (последовательность цифр), но мы никогда не можем сказать, a + b == 1 в этом случае.

Я хочу как-то определить десятичное число, чтобы оно поддерживало +, -, *, /, >, == операции, и ни на что +, -, *, / Операция, которую мы применили к этим десятичным числам, мы получаем новые десятичные числа, которые мы можем вычислить с точностью до k цифр, учитывая любое натуральное число k.

Я задаюсь вопросом: есть ли идея, которая может решить это?

1 ответ

Haskell предлагает Rational, Cyclotomic, а также CReal для точной арифметики.

CRealвычислимый реал приближается к представлению действительных чисел на машине настолько близко, насколько это возможно; почти любое глупое действительное число, которое вы можете придумать и описать, может быть вставлено в CReal, Компромисс между способностью представлять так много вещей заключается в том, что ваша наблюдательность сильно ограничена. Проверка на равенство, проверка того, больше ли одно, чем другое, даже уверенность в том, какой должна быть первая цифра, являются технически неразрешимыми проблемами; хотя пакет, предоставленный на Hackage, обеспечивает алгоритмы приближения для всех этих наблюдений.

Cyclotomic может представлять гораздо меньшую часть действительных чисел и может представлять значительную часть комплексных чисел, сохраняя при этом точное вычисление, и поддерживает гораздо больше наблюдений в решающей форме. Многое из того, что вы хотите сделать, можно сделать с помощью циклотомических чисел.

Rational представляет все числа, которые могут быть записаны в виде дробей. Это значительно меньший кусок реала, чем CReal или же Cyclotomic: квадратные корни (и другие корни) практически отсутствуют, тригонометрические функции практически отсутствуют, числа pi и e отсутствуют и т. д. Но наблюдения, соответственно, более эффективны, чем для CReal а также Cyclotomicтак что иногда они просто билет.

... конечно, если эффективность имеет значение, Double собирается взорвать все это из воды с сегодняшним оборудованием. Тщательно выбирайте яд!

Другие вопросы по тегам