Кіріспе

Сандық талдаудағы алгоритмдер
Сандық талдауда Каханның жиынтық алгоритмі, сондай-ақ өтелмелі жиынтық деп аталады, қарапайым тәсілмен салыстырғанда, шекті дәлдігі бар қозғалмалы нүктелі сандар тізбегін қосу арқылы алынған жиынтықтың сандық қатесін едәуір азайтады. Бұл жеке жұмыс істейтін өтемақыны (кіші қателерді жинақтауға арналған айнымалы) сақтау арқылы жүзеге асырылады, нәтижесінде соманың дәлдігі өтемақы айнымалысының дәлдігіне дейін кеңейтіледі. Атап айтқанда, сандарды тізбектеп қосудың ең нашар жағдайдағы қатесі пропорционалды түрде өседі, ал кездейсоқ кіріс деректері үшін орташа квадраттық қатесі де өседі (дөңгелектеу қателері кездейсоқ қозғалыс жасайды). Өтелмелі жиынтықпен, жеткілікті дәлдігі бар өтемақы айнымалысын пайдаланып, ең нашар жағдайдағы қателік шегі тиімді түрде тәуелсіз болады, сондықтан көптеген мәндерді тек нәтиженің қозғалмалы нүктелік дәлдігіне байланысты болатын қателікпен қосуға болады. Иво Бабушка да ұқсас алгоритмді тәуелсіз түрде ойлап тапқан сияқты (сондықтан Кахан-Бабушка жиынтығы). Осыған ұқсас, бұрынғы техникалар, мысалы, Бресенхамның сызық алгоритмі, бүтін сандар операцияларындағы жинақталған қателерді қадағалау (бірінші рет сол кезде құжатталған болса да) және дельта-сигма модуляциясы.

Баламалар

Қахан алгоритмі n санды қосудағы қателік өсуіне жетіседі, бірақ жұптық қосу арқылы одан сәл нашар өсуге қол жеткізуге болады: сандар жиынтығы екіге бөлініп, әр бөлігі қосылады, содан кейін екі қосындысы жинастырылады. Іс жүзінде, кездейсоқ таңбалы дөңгелектеу қателері болғанда, жұптық қосудың орташа квадраттық қателіктері өседі. Кирхнер мен Кулиш тек бүтін арифметиканы қолданатын, бірақ үлкен аккумуляторды қажет ететін тағы бір әдісті сипаттады; аппараттық жүзеге асыру Мюллер, Руб және Рюллинг сипаттады.

Кітапханалардың қолдауы

Жалпы, компьютерлік тілдердегі кіріктірілген "қосынды" функциялары әдетте, нақты жиынтық алгоритмінің, тіпті Кахан жиынтығының қолданылатынына кепілдік бермейді. Сызықтық алгебраның кіші программалары үшін BLAS стандарты өнімділік себептерімен операциялардың нақты есептелу ретін міндетті етуден қашып қалады, ал BLAS іске асырулары көбінесе Кахан жиынтығын қолданбайды. Python компьютерлік тілінің стандартты кітапханасы жоғары дәлдіктегі жиынтық үшін fsum функциясын анықтайды. Python 3.12 нұсқасынан бастап кіріктірілген "sum" функциясы Неймайер жиынтығын пайдаланады. Julia тіліндегі сома функциясының әдепкі іске асырылуы жоғары дәлдік пен жақсы өнімділік үшін жұпты жиынтықтауды қолданады, бірақ сыртқы кітапхана жоғары дәлдік қажет болған жағдайларда Неймайердің sum kbn деп аталатын түрін іске асырады. C# тілінде HPCsharp nuget пакеті Neumaier түрін және жұпты жиынтықтауды іске асырады: скалярлық, SIMD процессор нұсқауларын пайдалана отырып деректерді параллель және көп ядролы түрде.