Потеря с плавающей точкой с двойной задачей для тройной суммы [Duplicate]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Потеря с плавающей точкой с двойной задачей для тройной суммы [Duplicate]

Сообщение Anonymous »

Для прототипирования я использую Python и Sympy, но возможная реализация будет нацелена на C ++. (Я не думаю, что будет какая-либо разница между C и C ++ для целей этого вопроса.) Во всех случаях математика с плавающей точкой является двойной точностью IEEE 754.

Код: Выделить всё

-21868
381874348283167701/8796093022208
81525135/65536
Мне нужно вычислить их сумму в контексте C, для которого произвольная точность недоступна и требуется двойной . Количество, показанные в с плавающей точкой шестнадцатеричной нотации после деления: < /p>
-0x1.55b0000000000p+14
+0x1.532c2c939020fp+15
+0x1.36fe63c000000p+10
< /code>
Реализация C будет иметь доступ только к этим величинам, а не к истинным рациональным.200463504468116437/8796093022208
< /code>
и при разделении производит < /p>
0x1.64183f632041fp+14
< /code>
Но наивная сумма индивидуального удвоения-< /p>
0x1.64183f632041ep+14
< /code>
, который имеет один бит ошибки. Я попытался устранить ошибку, используя следующие стратегии: < /p>
Я попытался сделать сумму по каждой перестановке терминов: < /p>
for permutation in itertools.permutations(terms):
print(sum(permutation))
< /code>
Это не изменяет выход.def kahan(terms: typing.Iterable[float]) -> float:
# https://en.wikipedia.org/wiki/Kahan_sum ... _algorithm
total = 0
comp = 0
for term in terms:
y = term - comp
t = total + y
comp = (t - total) - y
total = t
return total

for permutation in itertools.permutations(terms):
print(kahan(permutation))
< /code>
Это не изменяет выход. Есть ли способ изменить или заменить сумму кахана, чтобы уменьшить эту ошибку?


Подробнее здесь: https://stackoverflow.com/questions/796 ... triple-sum
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»