Кіріспе
64 биттік компьютерлік сан форматы
Қос дәлдікті жылжымалы нүктелік сан форматы (кейде FP64 немесе float64 деп аталады) – бұл жылжымалы нүктелік сан форматы, әдетте компьютер жадында 64 бит алады; ол жылжымалы радикс нүктесін пайдалану арқылы сандық мәндердің кең динамикалық диапазонын көрсетеді. Қос дәлдік, бір дәлдіктің диапазоны немесе дәлдігі жеткіліксіз болған жағдайда таңдалуы мүмкін. IEEE 754 2008 стандартында 64 биттік 2-негіздік формат ресми түрде binary64 деп аталады; ол IEEE 754 1985 жылы double деп аталды. IEEE 754 қосымша жылжымалы нүктелік форматтарды, соның ішінде 32 биттік 2-негіздік бір дәлдікті және соңғы кезде 10-негіздік бейнелеуді (ондық жылжымалы нүкте) анықтайды. Жылжымалы нүктелі дерек түрлерін қамтамасыз еткен алғашқы бағдарламалау тілдерінің бірі – Фортран. IEEE 754 1985 кеңінен қабылдануға дейін, жылжымалы нүктелі дерек түрлерінің көрсетілуі мен қасиеттері компьютер өндірушісіне, компьютер моделіне және бағдарламалау тілдерін іске асырушылардың шешімдеріне байланысты болды. Мысалы, GW BASIC-тің қос дәлдікті дерек түрі 64 биттік MBF жылжымалы нүктелік форматы болды.
Екі есе дәлді арифметикамен орындау жылдамдығы
Екі дәлдікті жылжымалы нүктелі айнымалыларды пайдалану, әдетте, бір дәлдікті айнымалылармен жұмыс істеуден баяу болады. Бұл мәселе ерекше айқын болатын есептеу салаларының бірі – GPU-да параллель кодты іске қосу. Мысалы, NVIDIA-ның CUDA платформасын пайдаланғанда, екі дәлдікті есептеулер, аппараттық құралға байланысты, бір дәлдікті пайдалануға қарағанда 2-ден 32 есеге дейін ұзаққа созылуы мүмкін. Сонымен қатар, көптеген математикалық функциялар (мысалы, sin, cos, atan2, log, exp және sqrt) дәл екі дәлдікті нәтижелерді алу үшін көбірек есептеулерді қажет етеді, демек олар баяу жұмыс істейді.
Бүкіл сандық мәндер бойынша дәлдік шектеулері
−253-тен 253-ке дейінгі бүтін сандарды (−9,007,199,254,740,992-ден 9,007,199,254,740,992-ге дейін) нақты бейнелеуге болады. 253-тен 254-ке дейінгі бүтін сандар = 18,014,398,509,481,984 2-ге еселік санға дейін дөңгелектеледі (жұп сан). 254-тен 255-ке дейінгі бүтін сандар = 36,028,797,018,963,968 4-ке еселік санға дейін дөңгелектеледі. 2n мен 2n+1 арасындағы бүтін сандар 2n-52 еселік санға дейін дөңгелектеледі.
Қолданылу
Қос дәлдік көптеген бағдарламалау тілдерінде әртүрлі тәсілдермен іске асырылады. Мысалы, SSE2 мүмкіндігі жоқ x86 процессорларында (немесе үйлесімділік үшін SSE2 қолданылмаған жағдайда) және әдепкі бойынша кеңейтілген дәлдік қолданылатын процессорларда бағдарламалық құрал кейбір талаптарды орындауда қиындықтарға тап болуы мүмкін.
C және C++
C және C++ кең ауқымды арифметикалық типтерді ұсынады. Стандарттар қос дәлдікті міндетті етпейді (тек C99 стандартының IEEE 754 арифметикасын қамтитын F қосымшасында ғана), бірақ көптеген жүйелерде double типі қос дәлдікке сәйкес келеді. Дегенмен, әдепкі бойынша кеңейтілген дәлдігі бар 32 биттік x86 процессорларда кейбір компиляторлар C стандартына сәйкес келмеуі мүмкін, немесе арифметика екі рет дөңгеленуден зардап шегуі мүмкін.
Фортран
Fortran бірнеше бүтін және нақты сандар түрлерін ұсынады, ал Fortran-ның ішкі модулі iso_fortran_env арқылы қолжетімді 64 биттік real64 түрі, қос дәлдікке сәйкес келеді.
Жалпы липс
Common Lisp SHORT FLOAT, SINGLE FLOAT, DOUBLE FLOAT және LONG FLOAT түрлерін ұсынады. Көптеген іске асырулар SINGLE FLOAT және DOUBLE FLOAT түрлерін қамтамасыз етеді, ал қалған түрлер оларға сәйкес синонимдер болып табылады. Common Lisp IEEE 754 стандартына сәйкес, жылжымалы нүктедегі ағып кетулер мен асып кетулерді, сондай-ақ нақты емес жылжымалы нүктелік қателерді ұстау үшін қателерді ұсынады. ANSI стандартында шексіз мәндер мен NaN (сан емес) туралы сипаттама жоқ, бірақ көптеген іске асырулар оларды қосымша мүмкіндіктер ретінде ұсынады.
Жава
Java нұсқасы 1.2-ге дейін әрбір іске асыру IEEE 754 стандатына сәйкес келуі тиіс еді. 1.2 нұсқасы x87 сияқты платформалар үшін аралық есептеулерде қосымша дәлдік әкелуге рұқсат берді. Осылайша, қатаң IEEE 754 есептеулерін сақтау үшін strictfp модификаторы енгізілді. Java 17 нұсқасында қатаң қалқымалы нүкте қайта жаңартылды.
JavaScript-ті қолдану
ECMAScript стандартында белгіленгендей, JavaScript-тегі барлық арифметикалық амалдар қос дәлдікті қозғалмалы нүктелік арифметика қолданып орындалады.
JSON
JSON деректерді кодтау форматы сандық мәндерді қолдайды, және кодталған сандарға қатысты сандық өрнектердің сәйкес келуі тиіс грамматикада олардың дәлдігі мен диапазоны бойынша ешқандай шектеулер жоқ. Дегенмен, RFC 8259 кеңінен қолданылатын IEEE 754 binary64 сандарына сүйене отырып, JSON деректерін өңдейтін жүйелер binary64 ұсынатын дәлдік және диапазоннан аспаса, жақсы үйлесімділікке қол жеткізуге болатынын ескертеді.