• График түрiнде қолданбалы интерфейсi бар жобаның негiзiнде жаңа жоба құру. Әрi бүтiн санды және заттық түрлер үшiн онда айнымалылар және тиiстi жазулармен батырманы жасаужөн сiлтеп отыру. Есiмi туралы хабары бар диалогтiк панельдер және тиiстi айнымалының мәнi батырмада басуда көлбеңдеуi керек.
• График түрiнде қолданбалы интерфейсi бар жобаның негiзiнде жаңа жоба құру. Онда "Жасалу", "Көбейту", "Бөлу", "sin" енгiзудiң екi тармағы, таңбаны және батырманы жасау. Таңбаға "Жасалу", "Көбейту", "Бөлу" батырмада басу бойымен нәтиже шығаруы керек. Әрекет double мөлшерлермен түрiндегi өткiзу. Таңбаға "sin" батырмаға басу бойымен таңбада солға дейiн көлбеңдеген мәннiң синусi шығаруы керек.
• Графиктүрiндеқолданбалыинтерфейспенжобаныңнегiзiндежаңажобақұру. Ондаенгiзудiңтармағынжасасынжәнеәрi бүтiнсандытүрлерүшiннұсқаныңтаңдауыменрадиогруппу, соныменбiрге "Санғатүрлендiру" жазуыбар JButton батырманы. Енгiзудiңтармағындатиiстi нұсқанытаңдаудашегiнделерi олүшiнтүрiндегi рауалы мән жататын шығарылатын сан кездейсоқ бейне пайда болуы керек. Енгiзудiң iшiндегi тармақтарыбатырмағабасукезiндежәнетиiстi, мағынасанғапреобразованотүрiндегi болуыкерекхабарламасыбардиалогтiкпанельдiңкөмегiменкөрсетуi керек.
• График түрiнде қолданбалы интерфейсi бар Java қосымшақұру. Онда "көктем" Spring атапшығуболуыкерек ), көктемгi айларорналастырған, және "m2=m1"және "M2 мағынаныалыпшығу" батырма. Spring екi айнымалылартүрiндегi берсiн - m1 және m2. Айнымалыайнымалы m1 белгiлi April мағынамен m2 - белгiлi емес. Айнымалы "m2=m1" батырмағабасукезiнде m2 m1-шi мағынатағайындауыкерек. "M2 мағынаныалыпшығу" батырмағабасукезiнде m2-шi айнымалыныңмағынасышығаруыкерек.
Бүтiн сандардың екiлiк ұсынуы. Позициялы және позициялық емес есептеу жүйелерi. Бүтiн сандардың екiлiк представлениеположительныхы. Терiс бүтiн сандардың екiлiк ұсынуы. Қосымша код. Бүтiн санды машина арифметикасының мәселесi. Бүтiн сандардың он алтылық ұсынуы және бiр есептеу жүйесiден басқасына аудармасы. Бит бойынша маскалар және жылжулар. Заттық сандарды екiлiк ұсыну. Екiлiгi ұсақта.Мантисса және санның тәртiбi. Жүзитiн нүктесi бар қалыпта IEEE 754 сандарды көрсетудi стандарт.
Машинакомпьютердiңпроцессоры (микрокоманданы ) бiроперацияғамүмкiнөңделгенмәлiметтерлердi үлесқорытыпайтқандаатайды. Болған iсалғашқыдербескомпьюлер 16-разрядными, яғни (екi байттық ) 16-битнымисөздерменжұмыс iстедi. Компьютер ол үшiн сондықтан басқару жүйесi да болған iс 16-разрядными. Мысалы, MS DOS. Болған iс келесi ұрпақ дербес компьюлер үшiн басқару жүйесi (Windows® '95/'98/NT/ME/2000/XP, Linux, MacOS®) 32-разрядны, өйткенi процессорлармен мию пайдалану үшiн арнады. Қазiргi басқару жүйелерi немесе 32-разрядны, немесе тiптi (процессорлардың холары үшiн нобай) 64-разрядны.
Сандарды көрсету екiлiк және бiр жүйеден басқасына он алтылық есептеу жүйелерi, сонымен бiрге өзгертуi жиi өлшеулер, бақылау үшiн аппаратураның программалауында керек және енгiзу-қорытынды басқару порттардың көмегiмен, цифрлық-аннотацияла және түрлендiргiш ұқсас-цифрлықтар.
Оң бүтiн сандардың екiлiк ұсынуы
Яғни, компьютерде бүтiн сан екiлiк есептеу жүйесiнде екiлiк кодада әдетте кодталады. Мысалы, 5-шi сан түрде таныстыруға болады .
Есептеу жүйесiнiң көрсеткiшi санды жанында астыдан оңнан солға жазу қабылданған.
Дәл осылай, тағысын-тағы. Есептеу сандарды ондық жүйеде бәрi өте белгi ұқсас:
. Бiрақ есептеу жүйесi ғана негiздеу ретiнде санды пайдаланады . 10-шi индекстiң есептеу ондық жүйе жазылған сандарында әдетте жазылмайды, бiрақ оны жазуға болады. Дегенмен, тағысын-тағы.
Барлығы екi цифрды екiлiк арифметикада, 0 және 1. Екiнiң дәрежелерiне арналған санның жiктеуiнiң еселiктерi бұл оң бүтiн сандарын екiлiк кода.
Яғни, екiлiк он санның көбейтуi, екiлiк сандарды көрсетуде нөл жазып бiтiруге оңнан солға алып келедi. Яғни, көбейту екiлiк жүзге - екi нөлдердi жазып бiтiруге. Тағысын-тағы.
Қалдықтың лақтырып тастауымен бүтiн санды бөлiну (кiшi ) соңғы биттiң лақтырып тастауы, бөлiнудi жолымен өндiредi - екi соңғы биттердiң лақтырып тастауы, тағысын-тағы. Әдетте мұндай операциясы бар n битке бит бойынша жылжулармен ( көбейту) солға атайды немесе ( бүтiн санды бөлiну) оңға.
Екiлiк сандардың қосуы ондық сандардың қосуы бар толық ұқсастығы бойымен "бағанаға" өндiруге болады. –-шы жалғыз өзгелiк онда, ғана екi цифрды екiлiк арифметика 0 және 1, ал қалай он (0мен 9бен аралығындағы ) цифры емес ондық. Сондықтан егер бiрлiктiң ондық арифметикасында үлкен дәрежеден астам мысалға, 1-шi қосу бередi және 9, онда 1-шi қосу даст оны екiлiк арифметикасында және 1. Яғни
(теңдiк бұл ондық жүйеде 1+1=2 сияқты көрiнедi). Дәл осылай, тағысын-тағы.
"бағанаға" қосудың мысалдары:
Көбейтудi мүлде сол сияқты орындайды:
Бүтiн санды көбейтудi машина өткiзуiнде бит бойынша жылжулар солға пайдаланады және қосу. Себебi бұл алгоритмдар өте қарапайым, оларларды аппаратты жүзеге асырады.
Терiс бүтiн сандардың екiлiк ұсынуы. Қосымша код
Үлкен бит негiзiнен белгiсiз кәдiмгi мағынасы болады, негiзiнен 0-шi тең бол оң сандар үшiн – әрқашан таныс. 1-шi тең бол үлкен биттiң терiс сандарында әрқашан. Бiз оңайлық үшiн мысалдардағы төрт биттiк арифметиканы қараймыз. Мысал ретiнде бүтiн оң сан сол кезде әкелуге болады .
Терiс сандарды сақтау үшiн қосымша кодты пайдаланады. (– n) сан, n оң, келесi алгоритм бойымен санға жiберiлетiн:
• яғни, 1-шi кезең: n сан алдымен сан n бiрлiгi бәрi уақытында нөлдердi алмастырылатын өзгерту n1-шi санға жолымен түрлендiредi, ал нөлдер бiрлiкпен ;
• яғни, 2-шi кезең: алған санға аударма кiшi дәреженiң бiрлiгi қосылады.
Керек терiс сандарды қосымша код дәрежелiктен бағынышты болғанын белгiлеу.
Мысалы, төрт дәрежелiк арифметикада (–1 ) санның коды болады, ал 8-разрядной арифметикада болады . (–2 ) санның кодтары болады және, тағысын-тағы.
Сол үшiн, үшiн қосымша код пайдаланудың себебiн түсiнсiн, кодтың вдополнительном таныстырылған сандарды қосуды қарап шығамыз.
Қосу оң және терiс сандарды
Нелiктен тең 1-шi санның сома болғанын қарап шықмыз және сан –1 қосымша код таныстырылған. –1-шi сан код вдополнительныйды алдымен ауыстырамыз. Бұл ретте .
• Этап1: ;
• Этап2: ;
Қорыта келгенде, төрт биттiк ұсынуда .
Тексерiс:
. Алған төрт биттiк ұяшықтың шек шығатын бесiншi дәреже серпiлию, шеңберiнде төрт биттiк арифметика сондықтан алады .
Сол сияқты
•
•
•
Анық, осындай барлық жағдайлардағы .
Егер бiздi жасалсақ (бiлiп қойыл бiз тең 1110_2) және болса, не болады?
Яғни, бiз төрт биттiк ұяшықтың шек шығатын үлкен биттiң лақтырып тастауынан кейiн аламыз, сонымен қатар болуы керек.
Терiс сандарды қосу
ұяшықтың сыртына шығатын артық үлкен биттiң лақтырып тастауы артынан. Сондықтан .
Оң сандарды шегеру қосымша кодқа оның аудармасының азайтқыштан нәтижеге алған терiсiмен оң санның қосуын жолымен жүзеге асырылады.
Әкелiнген мысалдар сол оң санның қосуы кодтың вдополнительном сақталған терiс ретiнде айғақ суретпен көркемдейдi, немесе екi терiс, өте қарапайым электрондық құрылғыларды негiзде мүмкiн (демек өте тиiмдi) аппаратты болу.
Бүтiн санды машина арифметикасының мәселесi
(аппаратты ) екiлiк машина арифметикасында қадiр-қасиет неткенмен машина ұяшығын түпкi дәрежелiк артынан пайда болатын өте жағымсыз ерекшелiктер ие болады.
Оң сандарды қосудың мәселесi
Яғни, мейлi тәртiпте бәрi.
Мейлi ендi .
Егер қосудың нәтижесi бүтiннiң астында ұяшықтар осы дәрежелiк үшiн таныс ерекшеленетiн ең жоғары оң санды асса, екi оң сандарды қосу яғни терiс мүмкiн бередi! Нәтиженiң мағыналары кез келген жағдайда рұқсат етiлген ауқымға шығуда өйткенi қате.
Егер бiзде таңбасыз бүтiн болса, мәселе бiрнеше өзгертiлген түрде қалады. Екiлiк ұсынуда жасаламыз. Себебi, сол кезде . Бiрақ артық бит серпiлию, және 0 аламыз. Төрт биттiк арифметикада сол сияқты, және,.
Ұяшық шығу бүтiн санды көбейтуде дәрежелiктiң сыртына жиiрек анағұрлым болады, қарағанда қосуда немесе шегеру. Мысалы . Егер бiздiң ұяшық төрт дәрежелiк болса, шек оны ар жағында шығуында болады, және бiз артық биттiң лақтырып тастауынан кейiн аламыз . Қорыта келгенде, бүтiн сандардың көбейтуi жеңiл мүмкiн терiс нәтиже беру. Сан том – тiптi терiс сан. Сондықтан мәлiметтерлердi бүтiн санды түрлермен жұмыстың жанында ерекше iлтипат ықылас бiлдiру керек онда, үшiн бағдарламада арифметикалық асыра толтырудың жағдайлары пайда болмады. Бүтiн санды айнымалылардың дәрежелiгiнiң жоғарылауы мәселе жұмсартуға рұқсат бередi, бiр жағынан оны толық жоймайды. Мысалы, айнымалы
byte m=10,n=10,k=10;
M*n, m*k сол кезде мағына және n*k рұқсат етiлген ауқымда жатады - 128..127. Ал m*n + m*k мiне соның iшiнде шығады. M*n*k туралы сөйлемей.
Егер бiздiң болса
short m=10,n=10,k=10;
асыра толтыру пайда болмайды тiптi m*n*k үшiн. Алайда, m*n*k m=n=k=100 мағынаның жанында рұқсат етiлген ауқым –32768 елеулi шектен шығатынын бiрдей болады..32767. Бiр жағынан m*n, m*k және n*k оларға (бiрақ уже4*m*n оған шығады) шықпайды. Long пайдалану түрiндегi көмектеседi және осы жағдайда. Дегенмен ендi мағына m=n=k=2000 пәлендей үлкен!) m*n*k шығуға ауқымның сыртына қайта әкеледi. Бiр жағынан m*n шығу үшiн ғана 50000 шақтыдан мағыналарда болады.
Таң ғажайып нәтижелер бүтiн санды арифметика даст көмегi бар факториалының есептеуi! Жүзитiн нүктемен бұл жағдайда жақсы санды пайдалану. Мысал:
byte i=127, j=1, k;
k=(byte)(i+j);
System.out.println(k);
Нәтижеде (- 128) санды аламыз. Егер бiздерге жазып көрсек
byte i=127,j=1,k;
System.out.println(i+j);
бiрде +128 алар едi. Ескертемiз, қосудың жүргiзуiн алдында byte мағына түрiндегi int мағынада түрiндегi түрлендiретiнбiз.
Екiлiкжүйеденондығынаөзгертуiнқарапшығамыз. Түрде N санжазыпаламыз
жәнеондықжүйедеалгебралықбiлдiрудi сияқтықараймыз. Ондықжүйенiңережебойыншаарифметикалықәрекеттерiнорындаймыз. Ондықсандардыкөрсетудасталынғаннәтиже N.
Ондық жүйеден екiлiгiне онының өзгертудiң мысалында қарап шығамыз. Белгiлi сан үшiн бiлдiруде еселiк табуы керек
Келесi алгоритм пайдаланып қаламыз: ондық жүйеде 2ге қалдықпен N сан бөлемiз. Кiшi дәреженiң жанында еселiгi (ол бөлгiштi асып түспейдi) бөлiнудiң қалдығы . Алдыңғы бөлiну алынған 2 бөлiндiге бұдан әрi бөлемiз. Бөлiнудiң қалдығы N екiлiк жазудың келесi еселiк болады. Бөлiндi тең нөл болмап жатқанда порға сол дейiн бұл рәсiмдi қайталай, еселiктердi тiзбектi аламыз .
Еселi негiздерi бар есептеу жүйелерiндегi сандарын өзгерту
N сан екiлiк қарап шығамыз және он алтылық ұсыныстар.
Байқаймыз, немiз . Бойымен топтарының саны екiлiк жазуда цифр төрт топтастырамыз. Төрт екiлiк цифрларды әр тобы 0нен дейiн 0нен яғнию дейiн сан таныстырады . Цифрдың салмағы тобына тобынан өзгертедi (16-ричной жүйенi негiздеу) егер. Қорыта келгенде, екiлiк ұсынудан он алтылығына сандарды аудармасы және керi жүзеге асырылады төрт екiлiк цифрлардан барлық групптерiн алмастыру (әр тобын бiр-бiрдендер) он алтылыққа тұрып қал және керi:
Оператор правого побитового сдвига с сохранением знака отрицательного числа
Таблица 4.6.
&=
y&=x эквивалентно y=y&x
|=
y|=x эквивалентно y=y|x
^=
y^=x эквивалентно y=y^x
>>=
y>>=x эквивалентно y= y>>x
>>>=
y>>>=x эквивалентно y= y>>>x
<<=
y<<=x эквивалентно y= y<<x
Бүтiн сан бит бойынша операциялар – қашан 0 бит жиынтықтарды сияқты қаралады, және 1 логикалық нөл ролдi ойнайды және логикалық бiрлiк. Екi сандар үшiн логикалық операция бәрi бұл ретте разряд бойынша – k жүзеге асырылады - k санның бiрiншiсiн дәреже түрт - екiншi дәрежемен тым. Бiз оңайлық үшiн төрт биттiк ұяшықтарды қараймыз, бiр жағынан ұяшық шақтаға Малайдың самаясы жүзеге асатындай сегiз биттi және byte түрге сәйкес келедi.
• ал ) a санда қондыру m операция бит 1 масканың көмегiмен қажеттi | a (арифметикалық, немесе OR бит бойынша оператор оған қоса) m.
Мейлi (яғни немесе нөлдер, немесе) санның тиiстi биттерiнiң – ұстауы мағына сан.
4.7-шi кесте.
a
m 0 1 0 1
a|m
Сiрә, нәтижеде a сандатәуелсiзбастапқымәннөлдiкжәнеекiншi битбiрлiккеорнатылды. Егерорнатылғанбiрлiкқажеттi маскасыныңбитболса, қорытакелгенде, маскасыбар OR операцияқажеттi бiрлiккеқажеттi айнымалыныңбиттерiнiңқондыруыүшiнпайдалануғаболады, алқалған – нөлдер.
• болыптабыл ) a сандақондыру (арифметикалық, немесе AND битбойыншаоператороғанқоса) a&m m операциябит 0 масканыңкөмегiменқажеттi
4.8-шi кесте.
a
m 0 1 0 1
a&m 0
0 • Сiрә, a сандатәуелсiзбастапқымәнбiрiншiнiңнәтижесiндежәнеүшiншi битнөлгеорнатылды. Егерорнатылғаннөлқажеттi маскасыныңбитболса, қорытакелгенде, маскасыбар AND операцияқажеттi нөлгеқажеттi айнымалыныңбиттерiнiңқондыруыүшiнпайдалануғаболады, алқалған – бiрлiк.
• Егернәтижеде 0 – 1 болсасiрә, неегер m маскабiрлiкиеболғанбитте, сан a инверсиядаболады: егер 1 тұрады, нәтижеде 0 болады. Мағынабитқалғанжағдайлардабұлжымайды.
• Битмаскасыменбастапқымағынанықалпынакелтiру XOR – қайтадан XOR операцияданкейiнсол:
4.10-шi кесте.
a^m 1 0 0 1
m 0 1 0 1
(a^m)^m 1 1 0 0
• Сiрә, ұяшықтыңмазмұны a ұяшықтабастапқыболатынмағынаменоғанқосақабылдайтын. ^ m = a (a ^ m ) әрқашанретiндеанық, өйткенi қайтаданинверсиясанбиттерiндегi бастапқымағыналардықайтарады. ОперацияXORмаскатуралығанаақпараттыжадтасақтауыбарэкранныңбiрбөлiктерiнiңтүстерiнинверсияүшiнпрограммалаудажиi пайдаланады. Маскақайтадан XOR солбастапқыбейненi қалпынакелтiредi. - Олүшiн, XOR режимгекестеқорытындыныңаудармасынәмiриеболәмiрдi суретсалудапайдаланады . (түс ) setXORMode.
M n n биткебитбойыншажылжусолғасан m шапшаңбүтiнсандыкөбейтуiнеэквиваленттi . Жылжуларданкейiнбосататын (табатыноңнансолға) алдыңғыбитнөлдердi толтырылады. Ескерукерек, ұяшықтыңсыртынашығатын (табатынсолжағында) үлкенбиттердi сасқалақтататын, соныменқатаркәдiмгi бүтiнсандыасыратолтыруда.
M n n биткебитбойыншажылжулароңғанемесесан m m n эквиваленттi шапшаңбүтiнсандыбөлiнуiне . ""және "" операторлардыңарасындағыайырмашылықтыңоң m үшiнбұлретте>жоқ.
M терiссандарыүшiнбитбойыншажылжулардыоперацияныендi қарапшығамыз. Себебi оларәрекетқарапайымемескодтыңвдополнительномдардысақтайды. Яғни, соныменқатарертерек, оңайлықүшiнұяшықтөртбиттiкесептеймiз, бiржағынанбитбойыншаоперациялар iсте int ұяшықтарүшiнғанатүрiндегi өткiзедi немесеүшiн long 32-битныхнемесе 64-битныхсандар.
Мейлi m бiрдей - 1. Осы жағдайда . Даст оператор, және бiз аламыз, бiрақ ұяшық үлкен бит төрт биттiгi артынан сасқалақтатады . Яғни да m көбейтуге толық баламалылық алады .
Басқа жағдай жылжу бит бойынша күйiнде оңға пайда болады. Оң сандар үшiн "" оң жылжуды оператор азатқан биттер нөлмен толтырады, ал үшiн терiс - бiрлiктермен. Терiс сандар үшiн, үшiн оң сан m эквиваленттi шапшаң бүтiн санды бөлiнуiне бұл оператор жеңiл байқау. M n бит кейiн азатқан жылжулардың нөл толтыратын оператор терiс сандар оң ауыстырады. Сондықтан ол эквиваленттi санның шапшаң бөлiнуiне мүмкiн емес болу . Бiрақ мұндай оператор кейде бол биттiң жиынтықтары бар санмен көрсетiлген ұяшық сақталған манипуляциялары үшiн қажеттi. Мағына өзi санның мағынасы осы жағдайда, ие болмағанында емес, ұяшық мөлшерлiнiң буферiн сияқты пайдаланғанында.
Мысалы, (бүтiн мағына) floatметодомFloat. intBitsToFloat санға мағына әлдебiр бүтiн құрастыратын бит тiзбек түрiндегi түрлендiруге болады немесе түрiндегi double әдiс . (бүтiн мағына) intBitsToDouble. Осылай, . float максималь мән (0x7F7FFFFF ) intBitsToFloat даст түрiндегi.
4.3. Заттық сандарды екiлiк ұсыну
Екiлiгi ұсақта
Бүтiн сан түрде таныстыруға болады
Сол сияқты екiлiк бытыра жазып алуға болады:
Байқаймыз, (жылжу туралы санның өзiне солға жиiрек сөйлейдi) оңға эквиваленттi санның көбейтуiне n дәрежелерiне екiлiк нүктенiң жылжумыз . (жылжу яғни санның өзiне оңға) солға – бөлiнуге нүктенiң жылжуы .
Мантисса және санның тәртiбi
Сандарды жүзитiн (floating point ) нүктесi бар қалыпта нақты айырмашылығы болатын сақтау алдымен ықшамдалған сұлба бiрнеше қарап шығамыз.
Жүзитiн нүктесiмен сан түрде мүмкiн таныстырылған болу . Санның s – белгiсi көбейткiш. M екiншi көбейткiш мантисса деп аталады, ал санның – тәртiбiмен сан.
Оңайлық үшiн үш тәуелсiз бөлiк тұратын 10-битовую ұяшықты қарап шығамыз:
Бiрiншi таңбалы биттi жүредi. Егер 1 –-шi тең бол терiс болса егер 0-шi оның тең бол болса, сан оң. Мантисса сақталған бит теру m шегiнде жататын оң сан бередi . Ол екiлiк нүкте жергiлiктi жерлерде тасымалдауы бiздiң екiлiк санымыздан жолымен санды мәндi цифрдың первойынан кейiн алады. Мысалы, сан, және және мантисса ылғи бiр ие болады, тең . Мантисса ерекшеленетiн ұяшықта нүкте келесi жетекшi бiрлiкке бұл ретте сақталмайды - ол түсiнедi. Сандарды мантиссыприведенных яғни түрде сақтайды .
(белгiнiң есептеуiмен) екiлiк нүктенiң жылжуларын сан санның тәртiп ерекшеленетiн ұяшықтың бiр бөлiгiнде сақталады. Бiздiң мысалда сан, және 0 шамасында ие болады, 1 және- 1, сәйкесiнше сәйкесiнше. Мантиссаның қатарындаларды көбейтуiнде көбейтедi, ал тәртiптер қалыптасады. – мантиссаның бөлiнуiнде бөлiседi, ал тәртiптердi шегередi. Және көбейту, және мантиссалардың бөлiнуi бүтiн сандар үшiн алгоритм бойымен сол болады. Бiрақ ұяшықтың өлшемдерiнде шығуда серпiлию, үлкен емес емес, алдыңғы бит.
Көбейтудiң әр операциясы нәтижеде немесе бөлiну дәл мантиссаның алдыңғы биттiң бiрнеше мағына айырмашылығы болатын нәтиженi бередi. Алдыңғы бит ысыраппен ұқсас жағдай көбейтулерде пайда болады және бөлiнулер. Егер олар есептеулерде сақталса ғой егер сандар үшiн ұяшықтардағы осы санның бiлдiретiн цифрларын түрiндегi сақталады, онда дәл нәтиже екi сандарды көбейтуде ұяшыққа нәтиже соңғысы жазған кезде лақтырып тастаған бiлдiретiн цифрлар ие болады, тiптi жағдай том. Ал жағдай әйтеуiр бөлiнуде шексiз периодты екiлiк бытыра дәл есептеулерде алуы керек, дегенмен тiптi бұл есептеулер дөңгелектеулерсiз теория жағынан алғанда мүмкiн емес өткiзу. "жүзитiн нүктемен" компьютерлерде есептеулердi байланған түпкi дәлдiкпен бұған қалыптың пайдалануында. Бұл ретте қарағанда екiлiк дәреже артық санның мантиссасына ерекшелейдi, операция қателiк сол кем осыған ұқсас.
Ескерту: (оған қоса болғанын, оған қоса болғанын немесе, – аналитикалық есептеулер, немесе, компьютер алгебрасының жүйесi) нышандық есептеулердi жүйе формул нәтижелердi түрде алумен дәл сандық есептерi өткiзуге рұқсат бередi. Дегенмен олар есептеу көп ақырынырақ шамасында орындайды, ресурстар артық әлдеқайда талап етедi және әзiрлеудiң дағарадай ортасысыз жұмыс iстей алмайды. Олары iс жүзiнде маңызды задачтарын көпшiлiгiнiң шешiмi үшiн сондықтан немесе қолданбайтын, пайдалану немесе орынсыз.
Қосуда немесе шегеру бiр тәртiпке сандарын келтiруде алдымен болады: кiшiсi тәртiппен санның мантиссасы бөлiседi, ал тәртiп – айырмашылық сандар ретiнде үлкеедi. Бөлiну бұл ретте оңға толтыруымен битке нөлдермен бит сол жағында босататын мантиссалардың жылжуын жолымен жүзеге асырылады. Ұяшықтың бiр бөлiгiнiң астында апарылған онына шек шығатын мантисса алдыңғы биттердi сасқалақтатады.
Мысал:
санды жасаламыз және сан мантисса бiрiншiсi үшiн, 1 шамасында, өйткенi . Екiншi –мантиссалар тәртiп үшiн - 1, өйткенi . Мағынаға екiншi сан 1, 2 орында мантисса оңға қозғалта тәртiптi келтiремiз, өйткенi тең шамасында 2-шi айырмашылық:
Бiрақ жуық мән (ескертемiз, 5 биттi сақталады) мантиссалардың екi соңғы бiлдiретiн биттерiн мұндай жылжуда сасқалақтатады, сондықтан аламыз . Машина арифметикасында не артынан алады
дәл мән орынына .
Қорыта келгенде, суреттеп айтылған қалыпта сан iсте тиiмдi болып көрiнедi, ал заттық емес. Қосудың операциясы, шегеру, көбейту бұл ретте және бөлiну қателiктермен орындайды, сол кiшiсi, қарағанда мантиссаның дәрежелiгi артық. Санның тәртiп қарсылық бiлдiрiлетiн дәреже екiлiк сан әсер етедi тек сандардың мағыналарын ықтимал ауқымға, және есептеулердi дәлдiкке әсер етпейдi.
Заттық сандарды жазбаның ғылыми өсиетi
Мәтiндiк файлда жазған кезде бағдарлама немесе "жазық мәтiн" (plain text ) түрде нәтижелердi беру сөздердi жазба түрiндегi мүмкiн емес . Деп аталатын ғылыми өсиеттi осы жағдайда пайдаланады, 10 негiздеу орынына қашан (Exponent – ЭКСПОНАТЕНТА қысқарту) E латын әрiптерiменi жазылады. Қорыта келгенде, қалай 1.5E14, 0.31E-7 сияқты жазып алады. E бастапқы әрiп мәселе шақырмаған бас жазды. Дегенмен төменгi регистрде бағдарламаны мәтiндi терудiң мүмкiндiгiн пайда болумен математикада табиғи логарифмдардың негiздеудiң белгiсi үшiн пайдаланатын e кiшi әрiптi пайдалана бастады. Түрдiң жазбасымен жеңiл сияқты қабылдау, ал . Бас әрiптермендi сондықтан жақсы пайдалану.
Үндемеу бойыншаға заттық түрлерi үшiн литералық тұрақты шамалар double түр ие болады. Мысалы, - 1.5,- 17E2, 0.0 . - Егер float литералық тұрақты шама түрiндегi енгiзуге талап етсе, float қысқарту f постфикс санды жазудан кейiн қосады ): 1.5f,- 17E2f, 0.0f .
Тең емес нөл модуль бойымен ең төменгi және float максималь мән түрiндегi тұрақты шамалардың көмегiмен алуға болады
*Бұл параграф мiндеттi емес болып көрiнедi және анықтама мақсаттарында тура келедi
Түрдiң какомға жүзитiн нүктесi бар қалыпта санды негiзiнен сақтайды ма? Жауап электрондық есептiк құрылымдар үшiн стандарт (IEC60559-шы атауының басқа нұсқасы: 1989) IEEE 754, игерiлген бередi. Стандарт бұл сандарды процессор жұмыс iстей алған: real*4 жүзитiн нүктесi бар қалыпта үш түрiндегi ескерген, real*8 және real*10. Бұл сандар 4, 8 алады және 10 байт, сәйкесiнше сәйкесiнше. Java типуreal*4 float сәйкес келедi, ал түр real*8 double сәйкес келедi. Ол тiл PASCAL, Java таралған бағдарлама жасау тiлдерi ғана пайдаланадыдан диалектiге real*10i түрдi қолданылылмайды.
Сан белгiнiң шығармасы, мантиссаның түрiнде өзiн таныстырады және ЭКСПОНАТЕНТА:
Сан тәртiп деп аталады. Ол әр түрлi сандар үшiн мүмкiн айырбастау. Барлық сандары үшiн жылжу аталатын түрiндегi берiлген тәртiптi мағына тұрақты. Тәртiптiң биттерiмен кодпен жазуға болған ең жоғары санды ол шамамен бiрдей. Айқынырақ .
• Real*4тердiң сандары үшiн:, d= 127.
• Real*8дердiң сандары үшiн:, d= 1023.
• Real*10дердiң сандары үшiн:, d=16383.
Сан жағдайда бiрыңғайлалған деп аталады, мантисса қашан шегiнде жатады . Бiрлiкке тең бол санның битi осы жағдайда бiрiншi әрқашан. Мантисса максималь мән бит оны қашан тең 1 жағдайда жетедi. Яғни, кем 2 iс жүзiнде маңызды дәлдiкпен кiшi разрядамантиссыны бiрлiкке ол мүмкiн тең 2 есептеу.
Бiрыңғайлалған түрде 1ден сақтайдына дейiн жүзитiн нүктесi бар қалыптың саны бәрi стандартына сәйкес IEEE 754 тәртiп мағыналарында аралықта. Мұндай сандарды көрсету негiзгi атаймыз. 0-шi тең бол қашан тәртiп, сандарды сақтаудың бiрнеше басқа қалыбын қолданылылады. Оны ерекше атаймыз. Тәртiп сандық емес мағыналарды кодтау, тиiстi ұсыну үшiн сақта сандық емес атаймыз. Туралы ерекше және сандық емес сандарды көрсетулер бiраздан соң айтылады.
Жад ұяшықтарындағы сандарын орналастыру мұндай:
Таблица 4.11.
Тип
Байт1
Байт2
Байт3
Байт4
…
Байт8
Байт9
Байт10
real*4
sppp pppp
pmmm mmmm
mmmm mmmm
mmmm mmmm
real*8
sppp pppp
pppp mmmm
mmmm mmmm
mmmm mmmm
mmmm mmmm
real*10
sppp pppp
pppp pppp
1mmm mmmm
mmmm mmmm
mmmm mmmm
mmmm mmmm
mmmm mmmm
S әрiп таңбалы биттi белгi қояды ; тәртiптiң екiлiк ұсынуының p – биттерi, мантиссаның екiлiк ұсынуының m – биттерi. Егер бiрлiкке тең бол – терiс болса егер нөлге, сан таңбалы битравен оң болса,. Сандардағы (float ) real*4 және (double ) real*8 мантиссаның жетекшi бiрлiгi негiзгi ұсынуда түсiнедi, бiрақ сақталмайды, сондықтан жүзеге асатындай мантиссаға оларында 23 емес апарғанын есептеуге болады, және жүзеге асатындай сақтайтын 52 бит емес, 24 және 53 бит. Мантиссаның real*10 жетекшi бiрлiгi санда жүзеге асатындай сақтайды, және мантисса 64 бит алады. Real*4-шi сандардағы тәртiпке 8 бит, сандардағы real*8 апар 11 бит апарған, ал сандардағы real*10 15 бит апарған.
Яғни, сандықемесұсынужағдайғасәйкескеледi, битбәрi қашантеңшамасында 1. Мантиссаныңмағынасыбайланысты "сан" мұндайүш (Infinity - "шексiздiк") Inf, (Not a Number - "санемес") NaN, ("анықталмағандық" Indeterminate –) Ind сияқтыбелгi қоятынарнаулысандықемесмағыналарданбiрбелгi қояды. Бұлмағыналарасыратолтырулардакөрiнiпқаладыжәнеесептеулердегi анықталмағандықтар. Мысалы, 1денбөлiнуде 0ге Inf алады, ал 0ненбөлiнуде 0ге Ind алады. NaN мағынасанғажолдыңөзгертуiндемүмкiналсын, шексiздiктентерiссан, тригонометриялықфункцияданлогарифмныңалынуытағысолсияқтылар.
Inf мағынамантиссанөлдiкбиткесәйкескеледi.IEEE 754 шексiздiккесәйкесбелгi иеболады. Егер –Inf бұл 1-шi битболсаегербұл 0-шi таңбалыбитi + Inf,.
Ind мағынатаңбалыбиттебiрлiккодталадыжәнебасқамантиссаныңбиттерi, тең 0 барлықдәрежелерде (нақты, алойдағыемес) үлкен. Таңбалыбиттiңқалғантiркестерi бәрi жәнемантиссашамаастында NaN апарған. Мағына NaN (Signaling NaN ) асыратолтыруытуралысигналының – шақыратынқозуларыекi түрлерiнболадыжәне (Quiet NaN ) шақырмайтын. Екi бұлтүрлердi мағына "оң" (нөлгетеңболтаңбалыбит) болааладыжәне "терiс" (бiрлiккетеңболтаңбалыбит).
Қазiргi бағдарламажасаутiлдерiндегi IEEE 754-шi стандартыменсәйкеспроцессоржүзегеасырылғанғанамүмкiндiктердiңбiрбөлiктерiнсүйейдi. Мысалы, түрбойымен, белгi бойымен Java шексiздiктiңмағынасындатаныпбiлiнедi: иеболады
Мағына float int ұяшықтардағытүрiндегi сақталғанбитжиынтықтытүрлендiругерұқсатберетiнқабықкластарынәдiстериеболады, int битұсынуыолардың float мағынасыкерiсiншетүрiндегi түрiндегi. Битжиынтыққарапайымболатынұяшықтардағыбұлреттебасқашатүсiндiреугебұлжымауғаұяшықтардыңмазмұнию.
Ұқсасоперациялардаболадыжәне long мағыналарүшiнтүрiндегi және double:
• (int мағынатүрiндегi) intBitsToFloat
• (long мағынатүрiндегi) longBitsToDouble
• (float мағынатүрiндегi) floatToIntBits
• (double мағынатүрiндегi) doubleToLongBits
Мысалы
• мағына (0x7F7FFFFF ) intBitsToFloat даст, тең . MAX_VALUE
• (0x7F800000 ) intBitsToFloat – мағына . POSITIVE_INFINITY
• (0xFF800000 ) intBitsToFloat – мағына . NEGATIVE_INFINITY.
• Бүтiн түрлердi пайдалануда бiлмейдi немесе ауқымның сыртына тиiстi биттер шығуда асыра толтырудың әр диагностикасысыз серпiлiгенiн ұмытады. Және алған нәтиже терiс белгi не мүмкiн бол немесе нөл. Әсiресе жиi асыра толтыру бiрнеше бүтiн величиндердi көбейтуде бiр-бiрiне пайда болады.
• Апатты дәлдiктi жоғалтумен сандық алгоритмдарын жазу.
• Теңдiкке жүзитiн нүктесi бар қалыпта екi сандарды салыстыру немесе жағдайда теңсiздiк, олар дәл арифметикада қашан берiспеуi керек.
Тапсырма
• Енгiзудiң екi тармағы ие болған график түрiнде қолданбалы интерфейспен жоба құрсын, және әрi бүтiн санды түрлер үшiн нұсқаның таңдауымен радиогруппа, сонымен бiрге "Жасалу"және "Көбейту" батырма JButton жазулармен. Енгiзу тармақтарындағы тиiстi нұсқаны таңдауда шегiнделерi ол үшiн түрiндегi рауалы мән жататын шығарылатын сандар кездейсоқ бейне пайда болуы керек. Iшiндегi пункт енгiзуiн батырмаға басу кезiнде және әрекеттердi нәтиже мағынада преобразованы тиiстi түрiндегi болуы керек, және қосудың орындауын нәтиже немесе көбейту таңбада көрсетуi керек. Әр түрлi мағыналар үшiн арифметикалық асыра толтыруды мәселенiң бар болуы әр түрiндегi тексеру. Айқындасын, жағдайдың какомға –-шы асыра толтыру қосуда жиiрек болады немесе көбейту. Және мұндай бiр белгiнi мағыналардың қаншалықты жиi ұшырасады, үшiн нәтижеде қарсы таңбаның нәтижесiн алды. Мұндай бiр белгiнi мағыналар енгiзудiң тармақтарында қолмен енгiзу, үшiн нәтижеде нөлдiк мағынаны алды.
• 1+x бiлдiрудi есептеген график түрiнде қолданбалы интерфейсi бар қосымшаға жазсын, және f переменнойfloat тағайындайды, сонымен бiрге 1+y бiлдiрудi есептейдi және айнымалы double d тағайындайды. Float x шама түрiндегi және double y түрiндегi пункт енгiзуiн көмекпен қолданушысымен енгiзiледi. F jLabel1 айырым таңбаға алып шықсын - 1, және d jLabel2 айырым таңбаға - 1. X үшiн есептеу өткiзсiн және 1E - 3тен 1E дейiн y, құбылмалы шегiнделер 1E - 18ге . Нәтиже түсiндiру.
• * Техникалық ЖООлардың студенттерi үшiн және университеттердiң факультеттерi физикалық-математикалық. Бiлдiрудi есептеген график түрiнде қолданбалы интерфейсi бар қосымшаға жазсын, және, және, . Себебi (x ) f2 (x ) жiктеу f1лердiң мүшелерiнiң бiрiншiлерiнен қатарда тұрады, онда (x ) f1 және (x ) f2 шамамен тең болуы керек . (x ) бiлдiру f1 мағынасы салыстыруға талап етедi және (x ) f2 әр түрлi x. Есептеу бәрi айнымалылар үшiн алдымен өткiзсiн және float функция түрiндегi, ал содан соң - айнымалылар үшiн және double функция түрiндегi. X шама қолданушы енгiзiледi. (x ) айырым f1_float (x ) f1_double, (x ) a_double, (x ) b_double, (x ) f1_float, (x ) a_float, (x ) b_float, сонымен бiрге мағынаның таңбасында алып шықсын - (x ) f2_float және (x ) f1_double - (x ) f2_double. 1E - 8ден 0.1ге дейiн x аргументтерi, құбылмалы шегiнделер үшiн мұндай салыстыру өткiзу.
Құрама оператор. If шартты оператор. Switch таңдау операторы. Инкременттiң операторлары ++ және декремент -.Циклаfor оператор. Циклаwhile оператор - алғы шартпен айналым. Циклаdo оператор...while - шартпен айналым. Үзу continue, break, return операторлары, . exit.
• Санныңбарлықбиттерiнiңинверсиясынбитбойынша a мойындамаудыкөмекпенжүзегеасырылады. • "", ""және "" битбойыншажылжуларжылжуғабарлықалыпкелоператордықолданылылатынұяшық, көрcетiлгенсанғасоқсолғанемесеоңғасоққан. Жәнеде<> m n - m бүтiнсандыбөлiнуге . • Үндемеубойымензаттықтүрлерүшiнлитералықтұрақтылар double түриеболады. Мысалы, - 1.5,- 17E2, 0.0 . Егер float литералықтұрақтытүрiндегi енгiзугеталапетсе, ("float" жиырылу) f постфикссандыжазуданкейiнқосады: 1.- 5f,- 17E2f, 0.0f . • Жүзитiннүктесi барқалыптасантаңбалытұрсоққан, мантиссажәнерет. Мұндайқалыптыңсандарыменбәрi операцияларбiрыңғайламалғаннәтиженi мантиссаалдыңғыбитқатенiңқорлануыменбiрнешешамасындабiргежүредi.
Жүзитiннүктесi барқалыптакөбейтужәнесандардыңбөлiнуiнөткiзуденәтижеапаттыдәлдiктi жоғалтудаболмайды. А при сложениях и вычитаниях такая потеря может происходить в случае, когда вычисляется разность двух значений, к которым прибавляется малая относительно этих значений добавка. Дәлдiктi жоғалтудың жанында реттердiң саны аз қосымшадан бұл мәндер ерекшеленген реттердiң санына тең.
Типтi қателер: • Табандатқан түрлердiң қолдануында бiлмей немесе диапазонның шектерiнде шығуда тиiстi соқ асыра толтырудың әр диагностикасысыз серпiлiгенiн ұмытады. Және жасалған нәтиже терiс таңба немесе нөл не бола алады. Әсiресе жиi асыра толтыру бiрнеше табандатқан мөлшерлердiң көбейтуiнде бiр-бiрiне пайда болады. • Апатты дәлдiктi жоғалтумен сандық алгоритмдарын жазу. • Оларды дәл арифметикада берiспеуi керек болатында жағдайда теңдiк немесе теңсiздiкке сандардың екiлiктерiн жүзитiн нүктесi бар қалыпта салыстыру.
Тапсырма
• Әрi бүтiн санды түрлер үшiн енгiзудiң екi тармағы және нұсқаның таңдауымен радиогруппа ие болған график түрiнде қолданбалы интерфейсi бар жоба құрсын, "Жасалу"және "Көбейту" батырма JButton жазулармен сонымен бiрге ал. Енгiзу тармақтарында&