Кіріспе
Сандық талдаудағы алгоритмдер
Сандық талдауда Каханның жиынтық алгоритмі, сондай-ақ өтелмелі жиынтық деп аталады, қарапайым тәсілмен салыстырғанда, шекті дәлдігі бар қозғалмалы нүктелі сандар тізбегін қосу арқылы алынған жиынтықтың сандық қатесін едәуір азайтады. Бұл жеке жұмыс істейтін өтемақыны (кіші қателерді жинақтауға арналған айнымалы) сақтау арқылы жүзеге асырылады, нәтижесінде соманың дәлдігі өтемақы айнымалысының дәлдігіне дейін кеңейтіледі. Атап айтқанда, сандарды тізбектеп қосудың ең нашар жағдайдағы қатесі пропорционалды түрде өседі, ал кездейсоқ кіріс деректері үшін орташа квадраттық қатесі де өседі (дөңгелектеу қателері кездейсоқ қозғалыс жасайды). Өтелмелі жиынтықпен, жеткілікті дәлдігі бар өтемақы айнымалысын пайдаланып, ең нашар жағдайдағы қателік шегі тиімді түрде тәуелсіз болады, сондықтан көптеген мәндерді тек нәтиженің қозғалмалы нүктелік дәлдігіне байланысты болатын қателікпен қосуға болады. Иво Бабушка да ұқсас алгоритмді тәуелсіз түрде ойлап тапқан сияқты (сондықтан Кахан-Бабушка жиынтығы). Осыған ұқсас, бұрынғы техникалар, мысалы, Бресенхамның сызық алгоритмі, бүтін сандар операцияларындағы жинақталған қателерді қадағалау (бірінші рет сол кезде құжатталған болса да) және дельта-сигма модуляциясы.
In numerical analysis, the Kahan summation algorithm, also known as compensated summation, significantly reduces the numerical error in the total obtained by adding a sequence of finite precision floating point numbers, compared to the obvious approach. This is done by keeping a separate running compensation (a variable to accumulate small errors), in effect extending the precision of the sum by the precision of the compensation variable. In particular, simply summing numbers in sequence has a worst case error that grows proportional to , and a root mean square error that grows as for random inputs (the roundoff errors form a random walk). With compensated summation, using a compensation variable with sufficiently high precision the worst case error bound is effectively independent of , so a large number of values can be summed with an error that only depends on the floating point precision of the result. Ivo Babuška seems to have come up with a similar algorithm independently (hence Kahan–Babuška summation). Similar, earlier techniques are, for example, Bresenham's line algorithm, keeping track of the accumulated error in integer operations (although first documented around the same time) and the delta sigma modulation.
Баламалар
Қахан алгоритмі n санды қосудағы қателік өсуіне жетіседі, бірақ жұптық қосу арқылы одан сәл нашар өсуге қол жеткізуге болады: сандар жиынтығы екіге бөлініп, әр бөлігі қосылады, содан кейін екі қосындысы жинастырылады. Іс жүзінде, кездейсоқ таңбалы дөңгелектеу қателері болғанда, жұптық қосудың орташа квадраттық қателіктері өседі. Кирхнер мен Кулиш тек бүтін арифметиканы қолданатын, бірақ үлкен аккумуляторды қажет ететін тағы бір әдісті сипаттады; аппараттық жүзеге асыру Мюллер, Руб және Рюллинг сипаттады.
Кітапханалардың қолдауы
Жалпы, компьютерлік тілдердегі кіріктірілген "қосынды" функциялары әдетте, нақты жиынтық алгоритмінің, тіпті Кахан жиынтығының қолданылатынына кепілдік бермейді. Сызықтық алгебраның кіші программалары үшін BLAS стандарты өнімділік себептерімен операциялардың нақты есептелу ретін міндетті етуден қашып қалады, ал BLAS іске асырулары көбінесе Кахан жиынтығын қолданбайды. Python компьютерлік тілінің стандартты кітапханасы жоғары дәлдіктегі жиынтық үшін fsum функциясын анықтайды. Python 3.12 нұсқасынан бастап кіріктірілген "sum" функциясы Неймайер жиынтығын пайдаланады. Julia тіліндегі сома функциясының әдепкі іске асырылуы жоғары дәлдік пен жақсы өнімділік үшін жұпты жиынтықтауды қолданады, бірақ сыртқы кітапхана жоғары дәлдік қажет болған жағдайларда Неймайердің sum kbn деп аталатын түрін іске асырады. C# тілінде HPCsharp nuget пакеті Neumaier түрін және жұпты жиынтықтауды іске асырады: скалярлық, SIMD процессор нұсқауларын пайдалана отырып деректерді параллель және көп ядролы түрде.