Изменения

Перейти к: навигация, поиск

Adaptive precision arithmetic

114 байт добавлено, 01:10, 21 октября 2011
Простое суммирование
}}
[[Файл:Adaptive_2.jpg|frame|центр|Рисунок к теореме Деккера. <tex>a</tex> и <tex>b</tex> имеют один знак.]]
[[Файл:Adaptive_3.jpg|frame|центр|Рисунок к теореме Деккера. <tex>a</tex> и <tex>b</tex> имеют противоположные знаки, и <tex>|b| > \frac{|a|}{2}</tex>.]]
Псевдокод для суммы:
<tex>4</tex> <tex>return (x, y)</tex>
Отметим, что величины на выходе этой процедуры вовсе не должны иметь один знак (, что будет видно из рисунка)примеров нижеВ первом примере <tex>a</tex> и <tex>b</tex> имеют один знак.[[Файл:Adaptive_2.jpg|слева|Рисунок к теореме Деккера]] <br clear="all" />Во втором примере <tex>a</tex> и <tex>b</tex> имеют противоположные знаки, и <tex>|b| > \frac{|a|}{2}</tex>.[[Файл:Adaptive_3.jpg|слева|Рисунок к теореме Деккера. ]] <br clear="all" />
Проблема с использованием этой процедуры заключается в требовании <tex>|a| \geqslant |b|</tex>. Если это заранее не известно, то необходимо выполнить сравнение перед ее вызовом. В большинстве С компиляторов, возможно, самым быстрым переносимым способом реализовать эту проверку является выражение <tex>if ((a > b) == (a > -b))</tex>. На эту проверку уйдет некоторое время, но увеличение времени может быть на удивление большим из-за современных процессоров с суперскалярными и конвейерными архитектурами, в которых вызов условного оператора может сбросить ветку предсказаний.
355
правок

Навигация