Арифметикалық төмен ағым: Сандық өңдеудегі шектеулер
Arithmetic underflow
Арифметикалық ағымдағы шамадан төмендеу (underflow) – есептеу нәтижесі компьютерде көрсетілмейтін санға дейін төмендеген жағдай. Деректердің дәлдігі, CPU және сандардың өңделуі туралы.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Арифметикалық ағындылық (сонымен қатар, қозғалатын нүктелі ағындылық немесе жай ғана ағындылық) – компьютерлік бағдарламадағы жағдай, онда есептеу нәтижесі компьютердің орталық процессорда (CPU) жадыда нақты бейнелей алатын абсолютті мәннен кіші сан болады. Арифметикалық ағындылық, егер қозғалатын нүктелік операцияның нақты нәтижесі мақсатты дерек типіндегі қалыпты қозғалатын нүктелік сан ретінде бейнеленетін ең кішкентай мәннен шамасы бойынша кішірек (яғни нөлге жақын) болса, пайда болуы мүмкін. Ағындылықты қозғалатын нүктелік мәннің көрсеткішінің теріс ағыны ретінде қарастыруға болады. Мысалы, егер көрсеткіш бөлігі -128 мен 127 арасындағы мәндерді көрсете алса, онда -128-ден кіші мәнді нәтиже ағындылыққа себеп болуы мүмкін. Бүтін сандар үшін "бүтін санның ағындылығы" термині әдетте, бүтін санның аса толуы немесе бүтін санды орап тастау жағдайының ерекше түріне сілтеме жасайды, онда азайту нәтижесі берілген бүтін сан типіне рұқсат етілген ең төменгі мәннен төмен санға әкеледі, яғни нақты нәтиже шығыс типінің теріс шексіздікке ең жақын мәнінен теріс шексіздікке жақын болды.
The term arithmetic underflow (also floating point underflow, or just underflow) is a condition in a computer program where the result of a calculation is a number of more precise absolute value than the computer can actually represent in memory on its central processing unit (CPU). Arithmetic underflow can occur when the true result of a floating point operation is smaller in magnitude (that is, closer to zero) than the smallest value representable as a normal floating point number in the target datatype. Underflow can in part be regarded as negative overflow of the exponent of the floating point value. For example, if the exponent part can represent values from −128 to 127, then a result with a value less than −128 may cause underflow. For integers, the term "integer underflow" typically refers to a special kind of integer overflow or integer wraparound condition whereby the result of subtraction would result in a value less than the minimum allowed for a given integer type, i. e. the ideal result was closer to negative infinity than the output type's representable value closest to negative infinity.
Төменгі ағыс аралығы
−fminN және fminN аралығы, мұндағы fminN – ең кіші оң қалыпты қозғалатын нүктелік мән, төменгі ағын аралығы деп аталады. Бұл аралықтың мөлшері, аралықтан тыс орналасқан жақын қалыпты қозғалатын нүктелік мәндер арасындағы қашықтықтан әлдеқайда үлкен болғандықтан осылай аталады. Мысалы, егер қозғалатын нүктелік дерек типі 20 битті көрсетуге мүмкіндік берсе, төменгі ағын аралығы аралықтан тыс жақын қозғалатын нүктелік мәндер арасындағы абсолютті қашықтықтан 221 есе үлкен болады. Ескі конструкцияларда төменгі ағын аралығында тек бір пайдалы мән болды – нөл. Төменгі ағын орын алғанда, нақты нәтиже нөлмен алмастырылды (не тікелей аппараттық құралдармен, не жүйелік бағдарламалық жасақтама арқылы бастапқы төменгі ағын жағдайын басқару арқылы). Бұл "нөлге дейін жуу" деп аталады. 1984 жылғы IEEE 754 нұсқасы қалыпты емес сандарды енгізді. Қалыпты емес сандар (нөлді қоса алғанда) төменгі ағын аралығын мәндермен толтырады, онда жақын мәндер арасындағы абсолютті қашықтық төменгі ағын аралығынан тыс жақын мәндер үшін бірдей болады. Бұл "біртіндеп төменгі ағынға" мүмкіндік береді, онда мүмкіндігінше жақын қалыпты мән қолданылғандай, жақын қалыпты емес мән қолданылады. Біртіндеп төменгі ағын қолданылғанда да, ең жақын мән нөл болуы мүмкін. Аралықтың сыртындағы жақын қозғалатын нүктелік мәндер арасындағы абсолютті қашықтық машинаның эпсилоны деп аталады, әдетте, 1 мәнімен қосылғанда сол қозғалатын нүкте схемасында 1 мәнін беретін ең үлкен мәнмен сипатталады. Бұл жағдайды былай жазуға болады, мұндағы – нақты мәнді қозғалатын нүктелік өрнекке түрлендіретін функция. Машинаның эпсилонын төменгі ағын деңгейімен (қалыпты емес сандарды ескергенде) шатастыруға болмайды, бірақ олар тығыз байланысты. Машинаның эпсилоны сигнификантты құрайтын биттердің санына байланысты, ал төменгі ағын деңгейі көрсеткіш өрісін құрайтын цифрлардың санына байланысты. Көптеген қозғалатын нүктелік жүйелерде төменгі ағын деңгейі машинаның эпсилонынан кіші болады.
The interval between −fminN and fminN, where fminN is the smallest positive normal floating point value, is called the underflow gap. This is because the size of this interval is many orders of magnitude larger than the distance between adjacent normal floating point values just outside the gap. For instance, if the floating point datatype can represent 20 bits, the underflow gap is 221 times larger than the absolute distance between adjacent floating point values just outside the gap. In older designs, the underflow gap had just one usable value, zero. When an underflow occurred, the true result was replaced by zero (either directly by the hardware, or by system software handling the primary underflow condition). This replacement is called "flush to zero". The 1984 edition of IEEE 754 introduced subnormal numbers. The subnormal numbers (including zero) fill the underflow gap with values where the absolute distance between adjacent values is the same as for adjacent values just outside the underflow gap. This enables "gradual underflow", where a nearest subnormal value is used, just as a nearest normal value is used when possible. Even when using gradual underflow, the nearest value may be zero. The absolute distance between adjacent floating point values just outside the gap is called the machine epsilon, typically characterized by the largest value whose sum with the value 1 will result in the answer with value 1 in that floating point scheme. This can be written as , where is a function which converts the real value into the floating point representation. While the machine epsilon is not to be confused with the underflow level (assuming subnormal numbers), it is closely related. The machine epsilon is dependent on the number of bits which make up the significand, whereas the underflow level depends on the number of digits which make up the exponent field. In most floating point systems, the underflow level is smaller than the machine epsilon.
Төменгі ағынды басқару
Төменгі ағыстың пайда болуы ("жабысқақ") күй битін орнатады, ерекшелік тудырады, аппараттық деңгейде үзіліс жасауға немесе осы әсерлердің бірнеше комбинациясына әкелуі мүмкін. IEEE 754 стандартында көрсетілгендей, төменгі ағыстың жағдайы тек қана дәлдіктің жоғалтылуы болған кезде ғана хабарланады. Әдетте, бұл соңғы нәтиже дәл емес деп анықталады. Дегенмен, егер пайдаланушы төменгі ағысты тұтқындаса, бұл дәлдіктің жоғалтылуын ескермей де болуы мүмкін. IEEE 754 стандартында төменгі ағысты (сондай-ақ басқа да ерекшеліктер) үшін әдепкі басқару – төменгі ағыстың болғанын қалқымалы нүкте күйі ретінде тіркеу. Бұл қолданбалық бағдарламалау деңгейінде көрсетілген, бірақ көбінесе аппараттық деңгейде оны қалай басқару керектігі ретінде де түсіндіріледі.
The occurrence of an underflow may set a ("sticky") status bit, raise an exception, at the hardware level generate an interrupt, or may cause some combination of these effects. As specified in IEEE 754, the underflow condition is only signaled if there is also a loss of precision. Typically this is determined as the final result being inexact. However, if the user is trapping on underflow, this may happen regardless of consideration for loss of precision. The default handling in IEEE 754 for underflow (as well as other exceptions) is to record as a floating point status that underflow has occurred. This is specified for the application programming level, but often also interpreted as how to handle it at the hardware level.