Мы не можем хранить десятичное число в бесконечной точности, но может быть какой-то способ представить их так же, как мы представляем бесконечные списки в haskell.Есть ли идея решить проблему с плавающей точкой в будущем?
Первая идея пришла ко мне, чтобы представить десятичное число с помощью чего-то похожего на Codata, так что для любого заданного натурального числа k мы можем вычислить десятичное число с точностью до k цифр.
Но есть некоторые очевидные проблемы, думать о количестве a = 0.333...
и b = 0.666...
, если мы плюс их вместе, мы получили ans = 0.999...
(последовательность цифр), но мы никогда не можем сказать, является ли a + b == 1
в этом случае.
То, что я хочу, чтобы определить десятичное число как-то, так что он не поддерживает +
, -
, *
, /
, >
, ==
операции, и независимо от того, что +
, -
, *
, /
операцию мы применили к ним десятичные числа, мы получаем новые десятичные числа, которые мы можем вычислить с точностью до k цифр при любом натуральном k.
Мне интересно: есть ли какие-либо идеи, которые могут это решить?
Вы видели http://hackage.haskell.org/package/cyclotomic? – jkeuhlen
Я не уверен, что ваши требования четко определены. Возможно, «Рациональный» - это то, что вы ищете; он поддерживает все эти операции без потери точности (вы не сможете построить с ними иррациональное число) – jberryman
В более общем плане вы никогда не сможете «x == y», потому что независимо от того, сколько цифр вы вычисляете, вы никогда не сможете быть уверены что следующий не будет отличаться. По-видимому, практическое решение состоит в том, чтобы иметь семьи чисел, чтобы программисты могли выбрать тот, который им нужен. –