Кіріспе

IEEE жылжымалы нүктелі арифметика стандарты

IEEE жылжымалы нүктелі арифметика стандарты (IEEE 754) – 1985 жылы Электр және электроника инженерлері институты (IEEE) құрамында бекітілген жылжымалы нүктелі арифметика бойынша техникалық стандарт. Бұл стандарт әртүрлі жылжымалы нүктелі жүзеге асыруларда кездесетін көптеген мәселелерді шешіп, оларды сенімді және тасымалдауға ыңғайлы етуге мүмкіндік берді. Көптеген аппараттық жылжымалы нүктелі процессорлар IEEE 754 стандартын қолданады. Стандарт мыналарды анықтайды:
арифметикалық форматтар: бинарлық және ондық жылжымалы нүктелі деректер жиынтығы, олар шекті сандардан (белгіленген нөлдер мен қалыптан тыс сандарды қоса алғанда), шексіздерден және арнайы «сан емес» мәндерінен (NaN) тұрады;
ауысу форматтары: жылжымалы нүктелі деректерді тиімді және ықшам түрде алмасу үшін қолданылатын кодтаулар (бит тізбектері);
дөңгелектеу ережелері: арифметикалық және түрлендіру операциялары кезінде сандарды дөңгелектеу кезінде орындалуы тиіс қасиеттер;
операциялар: арифметикалық форматтардағы арифметикалық және басқа операциялар (мысалы, тригонометриялық функциялар);
қосымша жағдайларды басқару: ерекше жағдайларды көрсету (мысалы, нөлге бөлу, мән шығып кету және т.б.). 2008 жылдың тамызында жарияланған IEEE 754 2008 стандарты 1985 жылғы IEEE 754 стандартының дерлік барлық бөлігін, сондай-ақ 1987 жылғы IEEE 854 радиксіне тәуелсіз жылжымалы нүктелі арифметика стандартын қамтиды. Ағымдағы нұсқасы, IEEE 754 2019, 2019 жылдың шілдесінде жарияланды. Ол негізінен түсіндірмелерді, қателерді түзетуді және жаңа ұсынылатын операцияларды қамтитын алдыңғы нұсқаның шағын өзгертілген нұсқасы болып табылады.

Тарих

1985 жылы жылжымалы нүктелік арифметиканың алғашқы стандарты IEEE 754 1985 жарияланды. Ол тек екілік жылжымалы нүктелік арифметиканы қамтыды. 2008 жылдың тамызында, жеті жылдық қайта қарау процесінен кейін, Дэн Зурас төрағалық еткен және Майк Коулишоу редакциялаған жаңа нұсқасы IEEE 754 2008 жарияланды. Ол IEEE 754 1985 (екілік жылжымалы нүктелік арифметика) және IEEE 854 1987 радикс тәуелсіз жылжымалы нүктелік арифметика стандартын алмастырды. Бастапқы стандарттағы екілік форматтар үш жаңа негізгі форматпен бірге, бір екілік және екі ондық, осы жаңа стандартқа енгізілді. Қазіргі стандартқа сәйкес болу үшін, іске асыруда кемінде бір негізгі форматты арифметикалық формат және алмасу форматы ретінде қолдану қажет. ISO/IEC/IEEE 60559:2011 халықаралық стандарты (IEEE 754 2008 стандартына толық сәйкес мазмұны) ISO/IEC PSDO келісімі аясында ISO/IEC JTC 1/SC 25 арқылы қабылдануына бекітіліп, жарияланды. Қазіргі нұсқасы, 2019 жылдың шілдесінде жарияланған IEEE 754, 2015 жылдың қыркүйегінде басталған қайта қарау процесінен кейін, Дэвид Г. Хоуф төрағалық еткен және Майк Коулишоу редакциялаған IEEE 754 2008 нұсқасынан туындады және оның орнына келді. Ол негізінен нақтылауларды (мысалы, totalOrder) және кемшіліктерді түзетуді (мысалы, minNum) қамтиды, сонымен қатар кейбір жаңа ұсынылатын операцияларды (мысалы, augmentedAddition) да қамтиды. ISO/IEC 60559:2020 халықаралық стандарты (IEEE 754 2019 мазмұнымен толық сәйкес) ISO/IEC JTC 1/SC 25 арқылы қабылдануына бекітіліп, жарияланды. Стандарттың келесі қайта қаралуы 2028 жылы күтілуде.

Жадта бейнелеу және кодтау

Кейбір сандардың бірнеше мүмкін болатын қозғалатын нүктелік өрнегі болуы мүмкін. Мысалы, егер b = 10, ал p = 7 болса, онда −12.345 саны −12345×10−3, −123450×10−4 және −1234500×10−5 түрінде өрнектелуі мүмкін. Дегенмен, арифметикалық операциялар сияқты көптеген операциялар үшін нәтиже (мәні) кіріс мәндерінің өрнегіне тәуелді емес. Ондық форматтар үшін кез келген өрнек жарамды, ал мұндай өрнектердің жиынтығы когорта деп аталады. Нәтиже бірнеше өрнекке ие болса, стандарт когортаның қай мүшесі таңдалатынын көрсетеді. Екілік форматтар үшін өрнек, мәнді дәл көрсетуге мүмкіндік беретін ең кішкентай өрнектелетін көрсеткішті таңдау арқылы бірегей етіледі. Сонымен қатар, көрсеткіш тікелей көрсетілмейді, бірақ ең кішкентай көрсеткіш 1-ге тең етіп, 0 саны нормадан төмен сандар үшін қолданылады. Нормальды диапазон көрсеткіші бар сандар үшін (көрсеткіш өрісінде барлық бірліктер немесе барлық нөлдер болмайды), маңызды бөліктің жетекші біті әрқашан 1 болады. Осылайша, жетекші 1 жадта ашық түрде көрсетілмей, біртүрлі түсіндірілуі мүмкін, ал стандарт бойынша маңызды бөліктің ашық түрде көрсетілген бөлігі 0 мен 1 арасында болады. Бұл ереже жетекші бит конвенциясы, жасырын бит конвенциясы немесе көмескі бит конвенциясы деп аталады. Бұл ереже екілік форматқа қосымша дәлдік беруге мүмкіндік береді. Жетекші бит конвенциясы нормадан төмен сандар үшін қолданылмайды, себебі олардың көрсеткіші нормальды диапазоннан тыс және ең кішкентай нормальды сандар үшін қолданылатын ең кішкентай көрсеткішпен масштабталады. Бірнеше кодтамалардың болуына байланысты (кемінде алмасу форматтары деп аталатын форматтарда), NaN басқа да ақпаратты алып жүруі мүмкін: таңба біті (мағынасы жоқ, бірақ кейбір операцияларда қолданылуы мүмкін) және пайдалы жүктеме, ол NaN-нің көзін көрсететін диагностикалық ақпарат үшін арналған (бірақ пайдалы жүктеме басқа да мақсаттарда, мысалы, NaN қорабында қолданылуы мүмкін).

Кеңейтілген және кеңейтілетін дәлдік форматтары

Стандартта негізгі форматтардан артық дәлдік беретін, кеңейтілген және кеңейтілетін дәлдік форматтары сипатталған. Кеңейтілген дәлдік форматы негізгі форматты дәлдігі мен экспоненталық диапазоны артық болғандықтан кеңейтеді. Кеңейтілетін дәлдік форматы пайдаланушыға дәлдік пен экспоненталық диапазонды өздігінен белгілеуге мүмкіндік береді. Іске асыру мұндай форматтар үшін кез келген ішкі бейнелеуді пайдалана алады; анықталуы тиіс нәрсе – оның параметрлері (b, p және emax) ғана. Бұл параметрлер берілген радикстің белгісі, маңызды бөлігі және экспонентасының комбинацияларынан тұратын шекті сандар жиынтығын бірегей түрде сипаттайды. Стандарт тіл стандарттарының әрбір қолдау көрсетілетін b базасы үшін p және emax-ті анықтау әдісін қарастыруын ұсынады. Стандарт тіл стандарттары мен іске асырулардың әрбір радикс b үшін қолдау көрсетілетін ең үлкен негізгі форматтан артық дәлдікке ие кеңейтілген форматты қолдауын ұсынады. Екі негізгі форматтың арасындағы дәлдікке ие кеңейтілген форматта экспоненталық диапазон келесі кең негізгі форматтың диапазонымен тең болуы керек. Мысалы, 64 биттік бинарлық санның 'emax' мәні кемінде 16383 болуы тиіс. x87 80 биттік кеңейтілген форматы осы талапқа сай келеді. Алғашқы IEEE 754 1985 стандартында да кеңейтілген форматтар туралы ұғым болған, бірақ emin мен emax арасында міндетті байланыс болмаған. Мысалы, Motorola 68881 80 биттік форматы, онда emin = − emax, сәйкес кеңейтілген формат болған, бірақ 2008 жылғы жаңартудан кейін сәйкессіз деп танылды.

Бірлескен алмасу форматтары

Алмасу форматтары белгілі бір формат үшін нақты ұзындығы бар биттік тізбек арқылы жылжымалы нүктелі деректерді алмасуға арналған.

Бинарлық

Бинарлы жылжымалы нүктелі сандарды алмасу үшін 16 бит, 32 бит, 64 бит және 32-ге еселенген 128 биттен жоғары ұзындықтағы алмасу форматтары анықталған. 16 биттік формат кішкентай сандарды алмастыру немесе сақтау үшін көзделеді (мысалы, графика үшін). Осы екілік алмасу форматтарының кодтау схемасы IEEE 754 1985 стандартымен бірдей: таңба биті, одан кейін экспонентаны сипаттайтын w бит, экспонентаға қосылатын ығысумен, және маңызды бөлікті сипаттайтын p-1 бит. k биттік форматтағы экспонента өрісінің ені w = round(4 log2(k)) − 13 формуласымен есептеледі. Қазіргі 64 және 128 биттік форматтар осы ережеге сәйкес келеді, бірақ 16 және 32 биттік форматтарда осы формула бойынша есептелгенге қарағанда (3 және 7 сәйкесінше) көбірек экспонента биттері (5 және 8 сәйкесінше) бар. IEEE 754 1985 стандартындағыдай, ығысқан экспонента өрісі шексіздікті (соңғы маңызды бөлік = 0) немесе NaN-ды (соңғы маңызды бөлік ≠ 0) көрсету үшін барлық 1 биттерімен толтырылады. NaN үшін, тыныш NaN және сигналдық NaN соңғы маңызды бөліктің ең маңызды битін пайдалану арқылы ажыратылады, ал қалған биттерде қосымша мәліметтер орналасады.

Ондық

Ондық үзіліс нүктелі сандарды алмасу үшін 32 биттің кез келген еселігіндегі алмасу форматтары анықталған. Бинарлық алмасу сияқты, ондық алмасу форматтарының кодтау схемасы белгіні, экспонентаны және маңызды бөлігін кодтайды. Екі түрлі бит деңгейіндегі кодтаулар анықталған, ал алмасу процесі қолданылып жатқан кодтаудың сыртқы көрсеткішінің қажет болуымен қиындатылуы мүмкін. Екі нұсқа да маңызды бөлікті тығыз жиналған ондық түрінде ондық сандардың ықшамдалған тізбегі ретінде немесе, балама ретінде, екілік бүтін сан ретінде кодтауға мүмкіндік береді. Біріншісі стандартты тікелей аппараттық жүзеге асыру үшін ыңғайлы, ал екіншісі екілік компьютерде бағдарламалық эмуляция үшін қолайлы. Екі жағдайда да кодталатын сандар жиыны (белгінің, маңызды бөлігінің және экспонентаның комбинациялары) бірдей, ал ерекше мәндер (±0 ең төменгі экспонентасымен, ± шексіздік, тыныш NaN және сигналдық NaN) бірдей кодталады.

Дөңгелектеу ережесі

Стандартта бес дөңгелектеу ережесі анықталған. Алғашқы екі ереже ең жақын мәнге дейін дөңгелектейді; ал қалғандары бағытталған дөңгелектеулер деп аталады.

Жақынға дейін дөңгелектеу

Жақынға дөңгелектеу, теңдікте жұпқа дейін – ең жақын мәнге дөңгелектеу; егер сан ортасында болса, ең кіші тақ санға дейін ең жақын мәнге дөңгелектеу. Жақынға дөңгелектеу, нөлден алысқа дейін (немесе алысқа дейін) – ең жақын мәнге дөңгелектеу; егер сан ортасында болса, оң сандар үшін жоғарылап, теріс сандар үшін төмендеп дөңгелектеу. Ең шекті жағдайларда, шамадан әлдеқайда кіші мән, оның таңбасына байланысты, ең кішкентай немесе ең үлкен шекті санға дөңгелектеу. Дәл осы шамадағы сандар теңдік деп есептеледі; мұндай теңдікті таңдау, шектелмеген экспонента болған жағдайда, шама бойынша келесі бейнеленетін қалқымалы нүктелі сандардың арасындағы орта нүкте ретінде қарастырылуы мүмкін. Шамасы k-дан әлдеқайда үлкен сандар тиісті шексіздікке дөңгелектеу. "Жақынға дөңгелектеу, теңдікте жұпқа дейін" екілік қалқымалы нүкте үшін стандартты және ондық үшін ұсынылатын стандартты. "Нөлден алысқа дейін дөңгелектеу" тек ондық жүзеге асыру үшін қажет.

Бағытталған дөңгелектер

0-ге қарай дөңгелектеу – нөлге қарай дөңгелектеу (сонымен қатар қысқарту деп те атайды). +∞ бағыты бойынша дөңгелектеу – оң шексізге қарай дөңгелектеу (сонымен қатар жоғарылау немесе төбе деп те аталады). −∞ бағытына қарай дөңгелектеу – теріс шексізге қарай дөңгелектеу (төмендеу немесе еден деп те аталады). + IEEE 754 ережесін қолдана отырып, бүтін сандарға дөңгелектеу мысалы:

Режим | Мысал мәні
------- | --------
+11.5 | +12.5
−11.5 | −12.5
Жақын, тіпті | +12.0 | +12.0 | −12.0 | −12.0
Жақын, нөлден алыс | +12.0 | +13.0 | −12.0 | −13.0
0-ге қарай | +11.0 | +12.0 | −11.0 | −12.0
+∞-ға қарай | +12.0 | +13.0 | −11.0 | −12.0
−∞-ға қарай | +11.0 | +12.0 | −12.0 | −13.0

Басқаша белгіленбесе, операцияның қозғалатын нүктелік нәтижесі, шексіз дәл (математикалық) нәтижеге дөңгелектеу функциясын қолдану арқылы анықталады. Мұндай операция дұрыс дөңгелектеумен орындалған болып есептеледі. Бұл талап дұрыс дөңгелектеу деп аталады.

Салыстыру предикаттары

Стандарт қолдау көрсетілетін арифметикалық форматта бір қалқыма нүктелі деректі екіншісімен салыстыруға арналған салыстыру операторларын ұсынады. NaN-мен кез келген салыстыру ретсіз деп есептеледі. −0 және +0 тең деп салыстырылады.

Жалпы реттелген предикат

Стандарт totalOrder предикатын ұсынады, ол қолдау көрсетілетін арифметикалық форматтың каноникалық мүшелері үшін толық реттіліктерді анықтайды. Предикат, егер бір қалқымалы нүктелі сан екіншісінен кіші болса, салыстыру предикаттарымен (бөлімді қараңыз) сәйкес келеді. Басты айырмашылықтар: NaN сұрыптауға жарамды. NaN, Infinity-ден (немесе кез келген басқа қалқымалы нүктелі сандардан) үлкен абсолюттік мәні бар деп есептеледі. (−NaN < −Infinity; +Infinity < +NaN.) qNaN және sNaN болғанда, qNaN-нің абсолюттік мәні sNaN-нен жоғары деп есептеледі. (−qNaN < −sNaN; +sNaN < +qNaN.) NaN содан кейін жүктемеге сәйкес сұрыпталады. IEEE 754 2008 стандартында кіші жүктемесі бар NaN кіші абсолюттік мәні бар деп есептеледі. IEEE 754 2019 стандартында кез келген жүзеге асыру анықталған реті қабылданады. Теріс нөл оң нөлден кіші деп есептеледі. Егер салыстырудың екі жағы да бірдей қалқымалы нүктелі деректерді көрсетсе, кішірек көрсеткіші бар дерек кішірек абсолюттік мәні бар деп есептеледі. Бұл IEEE 754 стандартына кірмейтін жағдайлар: Clamped: нәтижедегі көрсеткіш мақсатты формат үшін тым үлкен. Әдепкі бойынша, коэффициентке ең үлкен пайдалы мәнге дейін азайту үшін соңғы нөлдер қосылады. Егер мұндай мүмкіншілік болмаса (себебі бұл қажетті цифрлардың саны мақсатты форматтан көп болуы мүмкін), онда overflow ерекшелігі туындайды. Rounded: нәтижедегі коэффициент мақсатты форматта қарастырылғаннан көп цифрларды қажет етеді. Егер нөлдік емес цифрлар жойылса, inexact ерекшелігі көрсетіледі. Сонымен қатар, егер операторлар Infinity болса немесе нәтиже мақсатты форматқа сәйкес келмесе, quantize сияқты операциялар да invalid operation ерекшелігін тудырады.

0-ге қол қойылған

IEEE 754 стандартында нөл таңбаланған, яғни «оң нөл» (+0) және «теріс нөл» (−0) болады. Көптеген орындалу орталарында оң нөл әдетте «0» деп, ал теріс нөл «-0» деп көрсетіледі. Екі мән де сандық салыстыруларда тең болып есептеледі, бірақ кейбір операциялар +0 және −0 үшін әртүрлі нәтижелер береді. Мысалы, 1/(−0) теріс шексіздік береді, ал 1/(+0) оң шексіздік береді (осылайша 1=1/(1/±∞) = ±∞ тепе-теңдігі сақталады). x=0 нүктесінде үзілісі бар log(x), signum(x) және y + xi санының квадрат түбірі сияқты, +0 және −0 мәндерін әртүрлі қарастыруы мүмкін басқа да көптеген функциялар бар, мұнда y – кез келген теріс сан. Кез келген жуықтау схемасындай, «теріс нөл» операциялары кейде жаңылысқандыққа себеп болуы мүмкін. Мысалы, IEEE 754 стандартында 0 = −0 әрқашан орындалмайды, себебі 1/0 ≠ 1/(−0).

Нормалды саннан төмен

Көрсеткіштен төменгі мәндер төменгі ағын аралығын олардың арасындағы абсолютті қашықтық төменгі ағын аралығының сыртындағы жақын мәндердегідей болатын мәндермен толтырады. Бұл төменгі ағында тек нөлдің болуына байланысты бұрынғы тәжірибеге қарағанда жақсарту, және төменгі ағынға түскен нәтижелер нөлмен алмастырылатын (нөлге дейін жуықтау) еді. Қазіргі заманғы қалқымалы нүктелік аппараттық құралдар әдетте көрсеткіштен төменгі (және көрсеткіштік) мәндерді өңдейді және көрсеткіштен төменгі мәндер үшін бағдарламалық эмуляция қажет етпейді.

NaN

IEEE 754 белгілі бір "жарамсыз" операциялардың нәтижесі ретінде қайтарылатын "Сан емес" (NaN) деп аталатын арнайы мәнді анықтайды, мысалы 0/0, ∞×0 немесе sqrt(−1). Жалпы, NaN таратылады, яғни NaN-ге қатысты көптеген операциялар NaN нәтижесін береді, бірақ кез келген қозғалмалы нүктелік мән үшін белгілі бір анықталған нәтиже беретін функциялар NaN үшін де солай істейді, мысалы, NaN ^ 0 = 1. NaN-ның екі түрі бар: әдепкі үнсіз NaN және, мүмкіндігінше, сигналдық NaN. Кез келген арифметикалық операцияда (сандық салыстыруларды қоса алғанда) сигналдық NaN "жарамсыз операция" ерекшелігін тудырады. Стандартта көрсетілген NaN-ның форматында қате түрін немесе оның себебін кодтауға болатын белгіленбеген биттер бар; бірақ мұндай кодтау үшін стандарт жоқ. Теориялық тұрғыдан алғанда, сигналдық NaN-ды орындалу кезінде басталмаған айнымалыларды анықтау үшін немесе қозғалмалы нүктелік сандарды басқа арнайы мәндермен кеңейту үшін пайдалануға болады, бұл кезде әдеттегі мәндермен есептеулердің жылдамдығы төмендемейді, бірақ мұндай кеңейтулер сирек кездеседі.

Құрылыс негіздері

Жалпы қате түсінік бар, яғни IEEE 754 стандартының осы жерде талқыланған ерекше мүмкіндіктері – кеңейтілген форматтар, NaN, шексіздік, субнормальдар сияқты – тек сандық талдаушыларға немесе күрделі сандық есептеулерге ғана қызықты болады. Шындығында, керісінше: бұл мүмкіндіктер сандық білімі жетілмеген бағдарламашылар үшін қауіпсіз және сенімді әдепкіліктерді қамтамасыз ету үшін, сондай-ақ сарапшылардың күрделі сандық кітапханаларын қолдау үшін жасалған. IEEE 754 стандартының негізгі әзірлеушісі Уильям Кахан былай дейді: «IEEE 754 бинарлық қозғалмалы нүктелі арифметика стандартының, сандық сарапшылар ғана пайдалана алатын мүмкіндіктер деп есептелмейтіні дұрыс емес. Шындығында, бәрі керісінше. 1977 жылы бұл мүмкіндіктер Intel 8087 процессорға ең кең аудиторияны қамту үшін енгізілді». Қате талдау, IEEE 754 сияқты қозғалмалы нүктелі арифметиканы бағдарламашылардың адал ниетімен жасаған қателіктерге белгілі бір деңгейде төзімді етуге қалай көмектесетінін көрсетеді. Мәселен, шексіздік және NaN сияқты арнайы мәндер қозғалмалы нүктелі арифметиканың алгебралық тұрғыдан толықтығын қамтамасыз етеді: әрбір операция нақты анықталған нәтижені береді және әдепкі бойынша машинаны тоқтату немесе қателікке түсірмейді. Сонымен қатар, ерекше жағдайларда қайтарылатын арнайы мәндердің таңдалуы көп жағдайда дұрыс жауап беруге бағытталған. Мысалы, IEEE 754 арифметикасында R(z) := 7 − 3/[z − 2 − 1/(z − 7 + 10/[z − 2 − 2/(z − 3)])] сияқты үздіксіз бөлшектері барлық кіріс мәндері үшін дұрыс нәтиже береді, себебі потенциалды нөлге бөлу (мысалы, z = 3 болғанда) оң шексіздік мәнін беру арқылы дұрыс өңделеді, сондықтан мұндай ерекшеліктерді қауіпсіз түрде елеуге болады. Кахан атап көрсеткендей, «Ариан-5» ракетасының жоғалуына себеп болған, қозғалмалы нүктелі мәнді 16 биттік бүтін санға түрлендіру кезіндегі тұзақ, IEEE 754 стандартының әдепкілік параметрлері бойынша орын алмас еді. x87 80 биттік форматты жобалау туралы Кахан былай дейді: «Бұл кеңейтілген формат жылдамдық жоғалтусыз, float және double мәндерімен ең қарапайым есептеулерді қоспағанда, барлық есептеулер үшін қолданылуға арналған. Мысалы, оны полиномдық есептеулер, скалярлық көбейтулер, жартылай және үздіксіз бөлшектер сияқты рекурсивті алгоритмдерді іске асыратын циклдардағы уақытша айнымалы ретінде пайдалану керек. Ол көбінесе қарапайым алгоритмдердің дұрыс емес нәтиже беруіне себеп болатын ертерек ағып кету немесе жоғалуды болдырмайды». Есептеулердің аралық нәтижелерін жоғары дәлдігімен және кеңейтілген экспонентасы бар кеңейтілген форматта есептеудің мысалдары ғылыми есептеулердің тарихи тәжірибесінде және ғылыми калькуляторларды жобалауда кездеседі. Мысалы, Hewlett Packard компаниясының қаржылық калькуляторлары арифметикалық және қаржылық функцияларды сақтаған немесе көрсеткеннен үш есе көп ондық таңбаға дейін орындады.

Ерекшеліктерді басқарудың баламалы әдістері

Стандартта әртүрлі нысандардағы ерекшеліктерді басқару ұсынылады, оның ішінде пайдаланушы анықтаған әдепкі мәндерді алдын ала қою, тұзақтар (басқару ағынын өзгертетін ерекше жағдайлар) және ағынды үзуге арналған басқа ерекшеліктерді басқару үлгілері, мысалы, try/catch. Тұзақтар және басқа да ерекшелік механизмдері IEEE 754 1985 стандартында болғандай, міндетті емес болып қалады.

Экспрессияны бағалау

Стандарт тіл стандарттарының операциялар тізбегінің семантикасын қалай анықтау керектігін ұсынады және нәтиже мәнін өзгертетін нақты мағыналар мен оптимизациялардың күрделіліктерін көрсетеді. Ал, стандарттың 1985 жылғы бұрынғы нұсқасы тіл интерфейсінің белгіленбеген бөліктерін қалдырған, бұл компиляторлар арасында үйлесімсіз мінез-құлыққа немесе оптимизациялайтын компилятордағы әртүрлі оптимизация деңгейлеріне әкеп соқты. Бағдарламалау тілдері пайдаланушыға әрбір сан жүйесі үшін өрнектердің аралық есептеулері үшін ең төменгі дәлдікті көрсетуге мүмкіндік беруі керек. Бұл стандартта «артықшылықты ен» деп аталады және оны жеке блоктар бойынша орнатуға болады. Өрнектер ішіндегі аралық есептеулер операндар енінің ең жоғары мәнін және егер белгіленген болса, артықшылықты енді пайдаланып есептелуі керек, ал уақытша мәндер сақталуы тиіс. Мысалы, x87 қозғалатын нүктелік аппаратты қолдайтын компилятор аралық есептеулерде екі есе кеңейтілген форматты пайдалану керектігін көрсетуге мүмкіндік беруі керек. Келесі өрнектерді бағалау кезінде айнымалыға дөңгелектеу және мән беруден бұрынғы кез келген мән емес, айнымалының сақталған мәні әрқашан қолданылуы керек.

Қайта жаңғыртылуы

IEEE 754 стандартының 1985 жылғы нұсқасы іске асыруларда көптеген өзгерістерге мүмкіндік берді (мысалы, кейбір мәндерді кодтау және белгілі бір қателіктерді анықтау). IEEE 754 2008 осы мүмкіндіктерді шектеді, бірақ кейбір өзгерістер әлі де сақталып қалды (әсіресе екілік форматтар үшін). Қайта өндірілетін нәтижелер шарты тіл стандарттарының қайта өндірілетін бағдарламаларды жазуға мүмкіндік беру керектігін көрсетеді (яғни, тілдің барлық іске асырылуында бірдей нәтиже беретін бағдарламалар) және қайта өндірілетін нәтижелерге жету үшін не істеу керектігін сипаттайды.

Гексадецималды литеральдар

Стандарт сыртқы гексадецималды мәнді және таңбалар тізбегін C99 стандартының гексадецималды жылжымалы нүктелі литералдары негізінде түрлендіруді ұсынады. Мұндай литераль міндетті түрде (+) немесе (-) таңбасынан, "0x" белгісінен, үтірмен немесе үтірсіз гексадецималды сандан, "p" экспонента белгісінен және міндетті түрде таңбасы бар немесе жоқ ондық экспонентадан тұрады. Синтаксис регистрге сезімтал емес. Ондық экспонента 2-нің дәрежесімен өлшенеді, мысалы, 0x0.1p4 – 1/256.