Сандардың төмендегі деңгейі: компьютер ғылымындағы қалыптан тыс сандар, нөлге жақын мәндерді ұсыну, IEEE 754 стандарты. Денormal сандар туралы толық ақпарат.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Бұл бетте субнормальді сандар туралы жалпы мәліметтер келтірілген. IEEE субнормальді және денормальді сандардың толық сипаттамасы үшін төмендегі IEEE бөлімін қараңыз. Нөлге жақын денормальді қалқыма нүктелі сандар
This page describes subnormal numbers in general. For the details of IEEE subnormal and denormal numbers, see the IEEE section below. Denormalized floating point numbers near zero
Компьютер ғылымында субнормальді сандар – қалқыма нүктелі арифметикада нөлге жақын ағылған мәндердің (underflow) жиымы. Шамасы ең кішкентай оң нормальді сандан кіші кез келген нөлдік емес сан субнормальді болып табылады, ал денормаль бұл диапазоннан тыс сандарды да білдіре алады.
In computer science, subnormal numbers are the subset of denormalized numbers (sometimes called denormals) that fill the underflow gap around zero in floating point arithmetic. Any non zero number with magnitude smaller than the smallest positive normal number is subnormal, while denormal can also refer to numbers outside that range.
Терминология
Кейбір ескі құжаттарда (әсіресе IEEE 754 және C тілінің бастапқы шығарылымдары сияқты стандарттар құжаттарында) "денормал" термині тек қана нормадан төмен сандарды білдіру үшін қолданылады. Бұл қолданыс әртүрлі стандарттық құжаттарда, әсіресе кез келген басқа денормалданған сандарды көрсетуге қабілетсіз жабдықты талқылау кезінде сақталады, бірақ бұл жердегі талқылауда 2008 жылғы IEEE 754 қайта қарауына сәйкес "субнормаль" термині қолданылады. Күнделікті әңгімелерде субнормаль және денормаль терминдері көбінесе бір-бірін алмастырып қолданылады, себебі нормадан төмен IEEE екілік сандары субнормаль диапазонынан тысқары жерде кездеспейді. "Сан" термині математикалық абстракция емес, цифрлардың нақты тізбесін сипаттау үшін еркін қолданылады; нақты сандардың қозғалатын нүктелік өрнектемелермен қалай байланысты екендігі туралы толық мәліметтер үшін "Қозғалатын нүкте" бөлімін қараңыз. Түсініктілік қажет болған жағдайда "өрнектеме" термині "сан" терминінен артық қолданылуы мүмкін.
In some older documents (especially standards documents such as the initial releases of IEEE 754 and the C language), "denormal" is used to refer exclusively to subnormal numbers. This usage persists in various standards documents, especially when discussing hardware that is incapable of representing any other denormalized numbers, but the discussion here uses the term "subnormal" in line with the 2008 revision of IEEE 754. In casual discussions the terms subnormal and denormal are often used interchangeably, in part because there are no denormalized IEEE binary numbers outside the subnormal range. The term "number" is used rather loosely, to describe a particular sequence of digits, rather than a mathematical abstraction; see Floating Point for details of how real numbers relate to floating point representations. "Representation" rather than "number" may be used when clarity is required.
Анықтама
Математикалық нақты сандар бірнеше қозғалатын нүктелік форматтар арқылы жуықтатылуы мүмкін. Бір формат қалыпты деп анықталады, ал қалғандары қалыптыға қатысты қалыпты емес, денормалды немесе қалыптан тыс деп анықталады. Қалыпты қозғалатын нүктелік мәнде мантиссада (немесе әдеттегідей, мантисса деп аталады) басты цифрлар болмайды; керісінше, басты цифрлар экспонентаны реттеу арқылы жойылады (мысалы, 0.0123 саны 1.23 × 10−2 түрінде жазылады). Керісінше, денормалдық қозғалатын нүктелік мәннің мантиссасы басты цифры нөл болатын болады. Бұл сандардың ішінде қалыпты емес сандар нормаланғанда ең кішкентай экспонентадан төмен экспонентаға ие болатын мәндерді көрсетеді (экспонентаның шектеулі диапазоны бар). IEEE қозғалатын нүктелік санының мантиссасы (немесе мантиссасы) – қозғалатын нүктелік санның маңызды цифрларын көрсететін бөлігі. Оң нормаланған сан үшін оны m0.m1m2m3…mp−2mp−1 түрінде көрсетуге болады (м – маңызды цифрды білдіреді, ал p – дәлдік), мұнда m0 нөлден өзгеше. Екілік негізде басты екілік цифр әрқашан 1 болады. Қалыпты емес санда экспонента ең аз мүмкін мәні болғандықтан, басты маңызды цифр нөл болады (0.m1m2m3…mp−2mp−1), бұл ең кішкентай қалыпты саннан нөлге жақын сандарды көрсетуге мүмкіндік береді. Қозғалатын нүктелік санның экспонентасы ең аз мүмкін мәнді құраса, ол қалыпты емес деп танылуы мүмкін. Осылайша, төменгі ағымдағы аралықты толтыру арқылы маңызды цифрлар жоғалады, бірақ төменгі ағымдағы мәнді нөлге дейін жуу әдісіндегідей (төменгі ағымға жеткенде барлық маңызды цифрларды жою) емес. Сондықтан қалыпты емес санды жасау кейде біртіндеп төменгі ағым деп аталады, өйткені нәтиже кішкентай болғанда есептеудің дәлдігін баяу жоғалтуға мүмкіндік береді. IEEE 754 2008 стандартында денормалдық сандар қалыпты емес сандар деп қайта аталды және екілік және ондық форматтарда қолдау көрсетіледі. Екілік алмасу форматтарында қалыпты емес сандар 0-ге тең смещенный экспонентамен кодталады, бірақ ең кішкентай рұқсат етілген экспонентаның мәнімен интерпретацияланады, ол бірге үлкен (яғни, 1 ретінде кодталғандай). Ондық алмасу форматтарында оларға арнайы кодтама қажет емес, өйткені формат тікелей қалыптан тыс сандарды қолдайды. Математикалық тұрғыдан алғанда, берілген таңбасы бар нормаланған қозғалатын нүктелік сандар шамамен логарифмдік аралықта орналасқандықтан, кез келген шекті мөлшердегі қалыпты қозғалатын сан нөлді қамтымайды. Қалыпты емес қозғалатын сандар – бұл сызықтық аралықта орналасқан мәндер жиынтығы, олар теріс және оң қалыпты қозғалатын сандар арасындағы аралықты жабады.
Mathematical real numbers may be approximated by multiple floating point representations. One representation is defined as normal, and others are defined as subnormal, denormal, or unnormal by their relationship to normal. In a normal floating point value, there are no leading zeros in the significand (also commonly called mantissa); rather, leading zeros are removed by adjusting the exponent (for example, the number 0.0123 would be written as 1.23 × 10−2). Conversely, a denormalized floating point value has a significand with a leading digit of zero. Of these, the subnormal numbers represent values which if normalized would have exponents below the smallest representable exponent (the exponent having a limited range). The significand (or mantissa) of an IEEE floating point number is the part of a floating point number that represents the significant digits. For a positive normalised number it can be represented as m0. m1m2m3 mp−2mp−1 (where m represents a significant digit, and p is the precision) with non zero m0. Notice that for a binary radix, the leading binary digit is always 1. In a subnormal number, since the exponent is the least that it can be, zero is the leading significant digit (0. m1m2m3 mp−2mp−1), allowing the representation of numbers closer to zero than the smallest normal number. A floating point number may be recognized as subnormal whenever its exponent is the least value possible. By filling the underflow gap like this, significant digits are lost, but not as abruptly as when using the flush to zero on underflow approach (discarding all significant digits when underflow is reached). Hence the production of a subnormal number is sometimes called gradual underflow because it allows a calculation to lose precision slowly when the result is small. In IEEE 754 2008, denormal numbers are renamed subnormal numbers and are supported in both binary and decimal formats. In binary interchange formats, subnormal numbers are encoded with a biased exponent of 0, but are interpreted with the value of the smallest allowed exponent, which is one greater (i. e., as if it were encoded as a 1). In decimal interchange formats they require no special encoding because the format supports unnormalized numbers directly. Mathematically speaking, the normalized floating point numbers of a given sign are roughly logarithmically spaced, and as such any finite sized normal float cannot include zero. The subnormal floats are a linearly spaced set of values, which span the gap between the negative and positive normal floats.
Өмірбаян
Көшірме емес сандар, қалқыма нүктелі сандарды қосу және алу операцияларының ешқашан шектен шықпайтынына кепілдік береді; екі жақын қалқыма нүктелі санның арасындағы айырмашылық әрқашан нөлден өзге болады. Біртіндеп шектен шығу болмаса, a – b алуы нөлдік нәтиже береді, тіпті егер мәндер тең болмаса да. Бұл өз кезегінде, біртіндеп шектен шығу қолданылғанда болмайтын нөлге бөлу қатесіне алып келуі мүмкін. Көшірме емес сандар, IEEE 754 стандарты жазылып жатқан кезде Intel 8087 процесорында қолданылған. Олар KCS форматының ұсынысындағы ең көп пікірталас тудырған мүмкіндік болды, бірақ бұл іске асыру көшірме емес сандарды практикалық тұрғыда қолдауға болатынын көрсетті. Кейбір қалқыма нүктелі процессорлар көшірме емес сандарды аппараттық деңгейде тікелей қолдамайды, оның орнына бағдарламалық қамтамасыз етуге жібереді. Бұл пайдаланушыға көрінбесе де, көшірме емес сандарды өндіретін немесе тұтынатын есептеулер, қалыпты сандармен жасалған ұқсас есептеулерге қарағанда әлдеқайда баяу болуы мүмкін.
Subnormal numbers provide the guarantee that addition and subtraction of floating point numbers never underflows; two nearby floating point numbers always have a representable non zero difference. Without gradual underflow, the subtraction a − b can underflow and produce zero even though the values are not equal. This can, in turn, lead to division by zero errors that cannot occur when gradual underflow is used. Subnormal numbers were implemented in the Intel 8087 while the IEEE 754 standard was being written. They were by far the most controversial feature in the K C S format proposal that was eventually adopted, but this implementation demonstrated that subnormal numbers could be supported in a practical implementation. Some implementations of floating point units do not directly support subnormal numbers in hardware, but rather trap to some kind of software support. While this may be transparent to the user, it can result in calculations that produce or consume subnormal numbers being much slower than similar calculations on normal numbers.
IEEE
IEEE бинарлық жылжымалы нүктелік форматтарында субнормальдар нөлдік экспонент өрісімен және нөлдік емес мәнді өрісімен көрсетіледі. IEEE бинарлық жылжымалы нүктелік форматтарында басқа денормалданған сандар жоқ, бірақ олар кейбір басқа форматтарда бар, соның ішінде IEEE ондық жылжымалы нүктелік форматтарында да.
In IEEE binary floating point formats, subnormals are represented by having a zero exponent field with a non zero significand field. No other denormalized numbers exist in the IEEE binary floating point formats, but they do exist in some other formats, including the IEEE decimal floating point formats.
Орындау мәселелері
Кейбір жүйелер қалыптан төмен мәндерді аппараттық деңгейде қалыпты мәндермен бірдей өңдейді. Басқалары қалыптан төмен мәндерді өңдеуді жүйелік бағдарламалық жасақтамаға ("көмек") жүктейді, аппараттық деңгейде тек қалыпты мәндер мен нөлді ғана өңдейді. Бағдарламалық жасақтамада қалыптан төмен мәндерді өңдеу әрқашан өнімділіктің айтарлықтай төмендеуіне алып келеді. Егер қалыптан төмен мәндер толығымен аппараттық деңгейде есептелсе, оларды қалыпты сандармен салыстырылатын жылдамдықпен өңдеуге мүмкіндік беретін техникалар бар. Дегенмен, көптеген қазіргі заманғы x86 процессорларында есептеу жылдамдығы айтарлықтай төмендейді. Ең нашар жағдайларда, қалыптан төмен операндарды қолданатын нұсқаулар 100 қосымша сағат циклын қажет етеді, бұл ең жылдам нұсқаулардың алты есе баяу жұмыс істеуіне себеп болады. Бұл жылдамдық айырмашылығы қауіпсіздік тәуекеліне әкелуі мүмкін. Зерттеушілер бұл уақыттық арнаның, зымыран ретінде әрекет ететінін көрсетті, бұл қаскөй веб-сайтқа веб-браузер ішіндегі басқа сайттың мазмұнын алуға мүмкіндік береді. Кейбір қолданбаларға қалыптан төмен сандарды болдырмау үшін кодты қамту қажет, әрі дәлдікті сақтау үшін, әрі кейбір процессорлардағы өнімділіктің төмендеуін болдырмау үшін. Мысалы, аудио өңдеуде қалыптан төмен мәндер әдетте адамның есту қабілетінен тыс сигналды білдіреді. Сондықтан, өнімділік төмендеуіне ұшырауы мүмкін процессорларда қалыптан төмен деңгейлерді болдырмау үшін сигнал қалыптан төмен деңгейге жеткенде нөлге дейін қысқарту немесе өте төмен шу сигналымен араластыру шаралары қолданылады. Қалыптан төмен сандарды болдырмаудың басқа әдістеріне DC смещениесін қосу, сандарды кванттау, Найквист сигналын қосу және т.б. жатады. SSE2 процессорлық кеңейтімнен бастап Intel мұндай мүмкіндікті CPU аппараттық құрамында ұсынды, ол қалыптан төмен сандарды нөлге дейін дөңгелейді.
Some systems handle subnormal values in hardware, in the same way as normal values. Others leave the handling of subnormal values to system software ("assist"), only handling normal values and zero in hardware. Handling subnormal values in software always leads to a significant decrease in performance. When subnormal values are entirely computed in hardware, implementation techniques exist to allow their processing at speeds comparable to normal numbers. However, the speed of computation remains significantly reduced on many modern x86 processors; in extreme cases, instructions involving subnormal operands may take as many as 100 additional clock cycles, causing the fastest instructions to run as much as six times slower. This speed difference can be a security risk. Researchers showed that it provides a timing side channel that allows a malicious web site to extract page content from another site inside a web browser. Some applications need to contain code to avoid subnormal numbers, either to maintain accuracy, or in order to avoid the performance penalty in some processors. For instance, in audio processing applications, subnormal values usually represent a signal so quiet that it is out of the human hearing range. Because of this, a common measure to avoid subnormals on processors where there would be a performance penalty is to cut the signal to zero once it reaches subnormal levels or mix in an extremely quiet noise signal. Other methods of preventing subnormal numbers include adding a DC offset, quantizing numbers, adding a Nyquist signal, etc. Since the SSE2 processor extension, Intel has provided such a functionality in CPU hardware, which rounds subnormal numbers to zero.