2p радианға тең), ал леп белгісі бірден осы санға дейінгі барлық бүтін сандардың көбейтіндісіне тең санның факториалын білдіреді. Мысалы, 5! = 1 ´ 2 ´ 3 ´ 4 ´ 5. Осылайша, алымы мен бөлімін есептегенде әрқайсына көбейту амалын қолданамыз, алымын бөліміне бөліп, содан қосу және азайту амалдарын пайдаланамыз. Қарапайым ба? Иә, аса қатты қарапайым емес. Бұл өрнектің ең жағымсыз бөлігі – өрнек соңындағы көп нүктелер. Көп нүкте теориялық тұрғыдан қарағанда есептеудің шексіз жалғасатынын білдіреді. Бірақ іс жүзінде кез келген х үшін бұл өрнекті есептеу қажет емес. Синус – периодтық функция, сондықтан x – ті тек 0-ден p/2 аралығында есептеп алу жеткілікті, содан соң қарапайым формула арқылы синустың ерікті х үшін мәнін алып аламыз. Sin x — есептеу үшін x кезінде 0-ден p/2-ге дейін 53 битке дейінгі дәлдікпен есептеу жеткілікті, бұл ыдырауда ондаған терминдерді қоса қарастырған жөн.
Сіз «Бұл жерден не шығады? — деп сұрайсыз. — Компьютерлер адамдардың өмірін жеңілдету үшін ойлап табылған, бірақ біз бұған қарамастан үнемі жаңа бағдарламалау тілін жазу қажеттілігіне және жаңа бағдарламар мәселесіне тап боламыз!» Бірақ бағдарламалаудың мәнісі осында, бір адам өзгермелі нүктелер арқылы есептеу бағдарламасын жасаса, оны басқалары да пайдалана алады. Мұндай бағдарламаларды жазумен ешқандай қателік болмайды. Өзгермелі нүктелермен жасалған есептеулер ғылыми және инженерлік бағдарламаларда орасан зор орын алады, сондықтан оларды жүзеге асыруда әрқашан үлкен мән беріледі. Компьтер дәуірінің басында өзгермелі нүктелер арқылы жасалған есептеу бағдарламаларын білу, жаңа компьютер үлгісін жасайтын адамдардың алдындағы басты міндеттердің бірі болды.
Шын мәнінде өзгермелі нүктемен жұмыс істеу үшін арнайы машина командаларын құрудың маңызы бар! Егер сіз аппараттық деңгейде өзгермелі нүкте операцияларын жасасаңыз, қалай 16 биттік микропроцессорларда көбейту және бөлу, күрделі математикалық есептеулер әлдеқайда жылдам жүзеге асыруға болады. Әрине, қолмен жасағаннан гөрі айту оңай. Бірақ есептеуде өзгермелі нүктенің маңыздылығы соншалық, олар үшін арнайы жабдық әлде қайда ерте ойлап табылды.
1954 жылы IBM 704 шығарылды, бұл өзгермелі нүктелік аппаратурасы бар алғашқы коммерциялық компьютер. Ондағы барлық сандар 36 бит ретінде сақталды, шамалар: маңызды бөлік үшін 27 бит, тапсырыс үшін 8 бит және белгі үшін 1 бит. Процессорда өзгермелі нүкте сандарын қосу, азайту, көбейту және бөлу амалдарын оырндау үшін схемалар болды. Басқа функциялар бағдарламалық түрде жүзеге асырылды.
Дербес компьютерлерде өзгермелі нүктелермен арифметика үшін аппаратық қамтамасыз етілу 1980 жылы пайда болды. Сол уақытта Intel компаниясы 8087 микрочипін ойлап шығарды. Қазіргі уақытқа дейін осы типтегі микросхемаларды математикалық копроцессорлар деп атайды. Копроцессор (coprocessor) атауы бұл микросхеманы процессордан бөлек қолдануға болмайтынын білдіреді. 8087 сопроцессоры алғашқы 16 биттік Intel 8086 және 8088 микропроцессорларымен жұмыс істеді.
8087 сопроцессоры — 8086 және 8088 микросхемаларының көптеген сигналдарын қолданатын 40 қорытындылы микросхема. Осы сигналдар арқылы процессор мен сопроцессор бір-бірімен байланысады. Процессор арнайы пәрменді (ESC) оқығанда, басқару сопроцессорды өзіне алады, осы командадан кейінгі машиналық кодты орындау - логарифмді, тригонометриялық функцияларды, дәрежеге көтеруді және т. б. есептеуге 68 команданың бірі орындайды. Деректер түрі IEEE стандартына негізделген. Өз уақытында 8087 сопроцессоры ол ең күрделі интегралды схема болып саналды.
Сопроцессорды кішкентай компьютер ретінде алып қарасақ болады. Белгілі бір өзгермелі нүктелік есептеуді орындау пәрменін алу үшін (мысалы, fsqrt пәрмені квадрат түбірді есептеу), сопроцессор өзінің ROM-да жазылған командалар жиынтығын іске қосады. Сопроцессорларда ішкі командалар — микрокод деп аталады. Әдетте микрокодты орындау циклдегі есептеулермен байланысты, сондықтан нәтиже бірден дайын болмайды. Соған қарамастан, сопроцессор микрокодты орындауды жылдамдатуға мүмкіндік береді, есептеулер өзгермелі нүктелік операцияларды бағдарламалық қамтамасыз етумен салыстырғанда кем дегенде 10 есе тез орындалады.
Бірінші IBM PC аналық платасында 8088 микросхемасының жанында 8087 копроцессоры үшін 40 контакталы розетка болды. Өкінішке орай, компьютер сатылымы кезінде ол керексіз болды. Жоғары есептеу жылдамдығын қажет ететін пайдаланушылар, 8087 сопроцессорын тікелей өзін сатып алып орнатты.
Бірақ 8087 сопроцессорын тікелей орнатқаннан кейін де барлық қолданбалар бірдей жылдам жұмыс істей бастаған жоқ. Мәтіндік редакторға, мысалы, өзгермелі нүктелік арифметика үшін бұл амал түкке де қажеттілікке жараған жоқ. Бірақ тіпті көптеген математикалық есептеу бағдарламалары, мысалы, электрондық кестелермен жұмыс жасайтын бағдарламаларға сопроцессордың ешқандай көмегі болған жоқ.
Біз сопроцессор үшін арнайы машиналық кодтарды бағдарламашы бағдарламаға өзі енгізуі керек екеніне көз жеткіздік. Бірақ сопроцессор стандартты жабдық емес болғандықтан, көптеген бағдарламашылар бұған алаңдамады. Себебі олар сопроцессоры жоқ пайдаланушылар үшін өзгермелі нүкте бағдарламаларын қолдан жазу керек болды, сондықтан 8087 микросхемасы оларды жұмыстан босатпады, керісінше оны қиындатты. Кейінірек бағдарламалаушылар, егер сопроцессор компьютерде болса ол қолданылатындай, егер жоқ болса, оның жұмысы бағдарламалық түрде модельденетіндей қосымшаларды жазуды үйренді.
Кейінірек Intel 286 процессорына арналған 287 сопроцессорын шығарды және 386 процессорына арналған 387 копроцессорларын ойлап тапты. 1989 жылы сопроцессор жабдықтың жеке элементі болуды тоқтаты, — Intel 486DX процессорында ол бұған дейін қарастырылған! Рас, 1991 жылы Intel қайтадан ескі схемаға оралды, арзан 486sx процессорын және оған 487sx сопроцессор шығарды. Алайда, 1993 жылы Pentium сериялы процессорлардың пайда болуымен сопроцессор қайтадан процессордың бір бөлігіне айналды, енді ол мәңгі болуы мүмкін. 1990 жылы Motorola компаниясы копроцессорды 68040 микропроцессормен біріктірді. Бұған дейін 68881 және 68882 микропроцессорларға арналған 68000 копроцессорлары бөлек сатылды. PowerPC процессорларында өзгермелі нүктелермен жұмыс жасау үшін қарастырылған керекті жабдықтар бар.
Өзгермелі нүктелі арифметикаға арналған аппараттық құрал — ассемблер тілінде бағдарламалаудан шаршаған адамға жақсы сыйлық. Бірақ оның мәні 1950 жылдары салынған басқа жетілдірумен салыстырғанда жоғалады. Біздің келесі аялдамамыз — бағдарламалау түрлері.