Сандық масштабтау коэффициенті және оның қолданылуы
Scale factor (computer science)
Компьютер ғылымында масштаб коэффициенті – санды басқа масштабта көрсету үшін көбейткіш. Дәлдікті төмендетіп, қателерге әкелуі мүмкін. Бағдарламалауда маңызды!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Компьютерлік ғылымда масштабтау коэффициенті – математикадағы дәрежеге ұқсас әрекет ететін, санды басқа масштабта көрсету үшін көбейтілгіш ретінде қолданылатын сан. Масштабтау коэффициенті, нақты әлемдегі сандар жиынтығын белгілі бір сандық форматқа сәйкес келу үшін басқа масштабта көрсету қажет болғанда пайдаланылады. Масштабтау коэффициентін қолдану көрсетілетін мәндердің диапазонын кеңейтсе де, бұл дәлдікті азайтады, соның салдарынан кейбір есептеулерде дөңгелектеу қатесі туындайды.
In computer science, a scale factor is a number used as a multiplier to represent a number on a different scale, functioning similarly to an exponent in mathematics. A scale factor is used when a real world set of numbers needs to be represented on a different scale in order to fit a specific number format. Although using a scale factor extends the range of representable values, it also decreases the precision, resulting in rounding error for certain calculations.
Қолданылуы
Бағдарламалаудың ыңғайлылығы үшін немесе осы сан форматына арналған аппараттық құралдың ұсынайтын артықшылықтарына байланысты, қолданба үшін нақты сан форматтары таңдалуы мүмкін. Мысалы, алғашқы процессорлар бөлшектік мәндерді көрсету үшін қозғалмалы нүкте арифметикасын қолдамады, сондықтан нақты әлемдегі мәндерді көрсету үшін бүтін сандар масштабтау коэффициенттерін қолдану арқылы сақталды. Сол сияқты, аппараттық арифметиканың белгілі бір ені бар (әдетте 16, 32 немесе 64 бит, дерек типіне байланысты), масштабтау коэффициенттері үлкен сандарды көрсетуге мүмкіндік береді (белгіленген масштабтау коэффициентімен қолмен көбейту немесе бөлу арқылы), бірақ бұл дәлдіктің төмендеуіне әкеледі. Қажеттілік туғандықтан, мұндай амалдар бағдарламалық жасақтамада орындалды, себебі аппараттық құрал бөлшектік мәнді қолдамады. Масштабтау коэффициенттері қозғалмалы нүктелі сандарда да қолданылады, көбінесе олар екінің дәрежесі болып табылады. Мысалы, қос дәлдік форматы масштабтау коэффициенті үшін 11 бит (бинарлық көрсеткіш) және маңызды бөлігі үшін 53 бит бөліп қояды, бұл әртүрлі сан диапазондарын көрсету үшін әртүрлі дәрежедегі дәлдікке мүмкіндік береді және 64 нақты биттерді пайдалану арқылы көрсетілетін сандардың диапазонын кеңейтеді (бірақ бұл дәлдіктің төмендеуімен байланысты). Дәлдіктің жоғалуына мысал ретінде, 16 биттік таңбасы жоқ бүтін сан (uint16) тек 65,53510-ға дейінгі мәнді сақтай алады. Егер 0-ден 131,07010-ға дейінгі мәндерді көрсету үшін таңбасы жоқ 16 биттік бүтін сандар қолданылса, онда масштабталған мәндер нақты әлемдегі жұп сандарға дәл сәйкес келетін 1/2 масштабтау коэффициенті енгізіледі. Салдарынан, мысалы, 3 саны көрсетілмейді, себебі сақталған 1 нақты әлемде 2-ні, ал сақталған 2 нақты әлемде 4-ті білдіреді; бұл көрсетудегі қателіктен аулақ болу үшін жеткілікті биттер жоқ.
Certain number formats may be chosen for an application for convenience in programming, or because of certain advantages offered by the hardware for that number format. For instance, early processors did not natively support floating point arithmetic for representing fractional values, so integers were used to store representations of the real world values by applying a scale factor to the real value. Similarly, because hardware arithmetic has a fixed width (commonly 16, 32, or 64 bits, depending on the data type), scale factors allow representation of larger numbers (by manually multiplying or dividing by the specified scale factor), though at the expense of precision. By necessity, this was done in software, since the hardware did not support fractional value. Scale factors are also used in floating point numbers, and most commonly are powers of two. For example, the double precision format sets aside 11 bits for the scaling factor (a binary exponent) and 53 bits for the significand, allowing various degrees of precision for representing different ranges of numbers, and expanding the range of representable numbers beyond what could be represented using 64 explicit bits (though at the cost of precision). As an example of where precision is lost, a 16 bit unsigned integer (uint16) can only hold a value as large as 65,53510. If unsigned 16 bit integers are used to represent values from 0 to 131,07010, then a scale factor of 1/2 would be introduced, such that the scaled values correspond exactly to the real world even integers. As a consequence, for example, the number 3 cannot be represented, because a stored 1 represents a real world 2, and a stored 2 represents a real world 4; there are not enough bits available to avoid this error in this representation.