Glitkomo

komputila datena formo prezentanta reelon
(Alidirektita el QNaN)
1 ŝanĝo en ĉi tiu versio atendas kontrolon. La stabila versio estis patrolita je 6 aŭg. 2023.

En komputiko, flosanta komoflosanta punktoglitkomoglitpunkto estas sistemo por prezentado en komputilo de reelaj nombroj kiuj povas esti tro grandaj aŭ tro malgrandaj por esti prezentitaj kiel entjeroj.

En la sistemo nombroj estas prezentataj proksimume kiel fiksita kvanto de gravaj ciferoj, skalitaj per eksponento. La bazo por la skalado estas kutime 2, 10 aŭ 16. Glitkoma prezento povas tial esti konsiderata kiel komputila uzo de scienca skribmaniero. La tipa nombro kiu povas esti prezentita akurate estas de formo

zsbe

kie s estas la mantiso, havanta fiksitan kvanton de ciferoj p en bazo b kaj la frakcian punkton post la unua cifero;

b estas la bazo;
e estas la eksponento;
z estas la signumo 1 aŭ -1.

aŭ ekvivalinte

kie r estas la entjera valoro de la tuta mantiso, ignorante enhavatan frakcian komon;

p estas la precizeco - la kvanto de ciferoj en la mantiso.

La valoroj z, s kaj e estas konservataj por ĉiu nombro aparte, la valoroj b kaj p estas konstantoj por la tuta sistemo de prezentado de nombroj kaj ne estas konservataj por ĉiu nombro aparte.

La eksponento e povas preni entjerajn valorojn en certaj limigoj por donita varianto de glitkomo, kaj povas esti kaj negativa kaj pozitiva.

La termino glitkomo estas pro tio en ĉi tia prezento la frakcia komo (dekuma punkto, aŭ, pli kutime en komputiloj, duuma punkto) povas kvazaŭ flosigliti laŭ longo de la mantiso.

La avantaĝo de glitkoma prezento super fiksopunkta aritmetiko kaj entjera aritmetiko estas ke ĝi povas subteni multe pli larĝan limigon de valoroj.

Ĉiu glitkoma nombro estas racionala nombro ĝi estas prezentata kiel unu entjero dividita per la alia entjero. La bazo tamen difinas la frakciojn kiuj povas esti prezentitaj precize. Ekzemple 1/5 ne povas esti prezentita akurate kiel glitkoma nombro uzanta duuman bazo sed povas esti prezentita akurate uzante dekuman bazon.

La nombro estas normaligita se ĝia la plej signifa (maldekstra) cifero de mantiso estas ne nulo. Por duuma prezento kun bazo 2, ĉi tio signifas ke la plej signifa cifero de mantiso estas 1. Pro tio ke ĝi estas ĉiam la sama, eblas ne konservi ĝin, donante unu superfluan biton de precizeco en la sama memoro. Ĝi estas nomata kiel la latentaimplica bito.

Iuj ne konsideras ĉi tiu uzadon de vorto "mantiso" al esti konforma, ĉar la mantiso estas tradicie difinita kiel la frakcia parto de logaritmo, dum kiam la karakterizo estas la entjera parto. Ĉi tiu terminaro venas de la logaritmaj tabeloj, kiuj estis reale tabeloj de mantisoj.

Limigoj de glitkomaj nombroj

redakti

La sistemo de prezentado de normaligitaj glitkomaj nombroj estas donata per kvar parametroj b, p, L, U, kie b estas la bazo de la sistemo, p estas la precizeco, L estas la plej malgranda eksponento ebla en la sistemo, kaj U estas la plej granda eksponento ebla en la sistemo.

Entuta kvanto de malsamaj normaligitaj glitkomaj nombroj estas

2(b-1)b(p-1)(U-L+1)

La plej malgranda prezentebla pozitiva normaligita prezentebla nombro estas

bL

kiu havas valoron en 1 kiel la kondukanta cifero kaj 0 en ĉiuj ceteraj ciferoj de la mantiso, kaj la plej malgrandan eblan valoron de la eksponento.

La plej granda prezentebla glitkoma nombro estas

b(U+1) (1-b−p)

kiu havas b-1 kiel la valoro por ĉiu cifero de la mantiso kaj la plej grandan eblan valoron por la eksponento.

Aldone estas prezenteblaj valoroj nulo kaj negativa nulo, kaj ankaŭ subnormalaj nombroj.

En plejparto de programlingvoj en skribo de glitkomaj konstantoj aŭ nepre devas esti la dekuma punkto, aŭ devas esti eksponento, apartigita de mantiso per litero "E" . Ekzemple, nombro 1,528535047×10−25 estas kutime skribata kiel 1.528535047E-25. La skribo estas dekuma, malgraŭ ke la ena prezento estas duuma. Se en nombra konstanto estas nek dekuma punkto nek eksponento, do la nombro estas kutime konsiderata kiel entjero.

Kutime programlingvoj kaj aparataro provizas eblecon de glitkomaj komputadoj de limigitaj precizecoj (vidu sube), sed ekzistas ankaŭ programaro kiu permesas multe pli grandan precizecon, tiel ke kvanto de memoro uzata por mantiso kaj eksponento estas limigata nur per havata memoro.

IEEE 754 / IEC 60559: glitkomo en modernaj komputiloj

redakti
  Pli detalaj informoj troveblas en artikolo IEEE 754.

Antaŭ la normo IEEE 754, komputiloj uzis multajn malsamajn formojn de glitkomo. Ili malsamis en la vorto-ampleksoj, la aranĝo de la prezentoj, kaj la rondiga konduto de operacioj. Ĉi tiuj malsamaj sistemoj realigis malsamajn partojn de la aritmetiko en aparataro kaj programaro, kun diversa akurateco.

La IEEE 754 normo estis kreita en komenco de la 1980-aj jaroj, post kiam vorta amplekso de 32 bitoj (kaj ankaŭ 16 kaj 64) estis akceptitaj. Inter la novaĵoj estis:

  • Precize donita kodigo de la nombroj per la bitoj. Ĉi tio ebligas tradonon de glitkomaj nombroj de unu komputilo al la alia.
  • Precize donita konduto de la aritmetikaj operacioj. Ĉi tiu intencis ke donita programo, kun donitaj datumoj, devas ĉiam produkti la saman rezulton sur ĉiu komputilo. Ĉi tio helpis malpligrandigi la preskaŭ mistikan reputacion, ke glitkoma kalkulado havas kvazaŭ nedeterminisman konduton.
  • La ebleco por esceptaj kondiĉoj (troo, divido per nulo, kaj tiel plu) al propagi tra kalkulado en certa maniero kaj ebleco de prilaboro de ili per la programaro en certa maniero.

La normo priskribas multajn similajn aranĝojn, malsamajn en nur kelkaj detaloj. Kvin el ĉi tiuj aranĝoj estas nomataj kiel bazaj aranĝoj, kaj du el ĉi tiuj estas aparte larĝe uzataj en aparataro kaj programlingvoj:

  • Unuobla precizeco estas duuma aranĝo kiu okupas 32 bitojn (4 bajtojn) kaj ĝia mantiso havas precizecon de 24 bitoj. Ĝi estas nomata kiel float en la C lingva familio, kaj kiel REAL*4 aŭ simple REAL en Fortran.
  • Duobla precizeco estas duuma aranĝo kiu okupas 64 bitojn (8 bajtojn) kaj ĝia mantiso havas precizecon de 53 bitoj. Ĝi estas nomata kiel double en la C lingva familio, kaj kiel REAL*8DOUBLE PRECISION en Fortran.

La aliaj bazaj aranĝoj estas:

  • Kvarobla precizeco estas duuma aranĝo kiu okupas 128 bitojn (16 bajtojn) Ĝi estas nomata kiel REAL*16 en Fortran.
  • Dekuma glitkoma (64-bitoj)
  • Dubla dekuma glitkoma (128-bitoj).

Malpli komunaj aranĝoj estas:

  • Etendita precizeca aranĝo, 80-bita duuma. Iam long double estas uzata por ĉi tiu en la lingvo C, kvankam long double povas esti ankaŭ la samo kiel double aŭ povas esti por kvarobla precizeco.
  • Duona precizeco, 16-bita duuma.
Precizeco Bajtoj Proksimuma kvanto de dekumaj ciferoj de precizeco La plej malgranda (ne normaligita) prezentebla valoro pli granda ol nulo, proksimume La plej malgranda normaligita prezentebla valoro pli granda ol nulo, proksimume La plej granda prezentebla valoro, proksimume
Unuobla 4 7 1,4×10−45 1,2×10−38 3,4×1038
Duobla precizeco 8 15 5,0×10−324 2,3×10−308 1,7×10308
Etendita precizeco 10 19 1,9×10−4951 3,4×10−4932 1,1×104932

Ĉiu entjero kun absoluta valoro malpli granda ol aŭ egala al 224 povas esti akurate prezentita en la unuobla precizeca aranĝo, kaj ĉiu entjero kun absoluta valoro malpli ol aŭ egala al 253 povas esti akurate prezentita en la duobla precizeca aranĝo.

La normo precizigas iujn specialajn valorojn, kaj iliajn prezentojn: pozitiva malfinio +∞, negativa malfinio -∞, negativa nulo -0 malsama de ordinara (pozitiva) nulo, kaj ne nombro (NaN).

Komparo de glitkomaj nombroj, kiel difinita per la IEEE normo, estas iom malsama de kutima entjera komparo. Negativa kaj pozitiva nuloj komparatas kiel egalaj, kaj ĉiu ne nombro komparatas kiel neegala al ĉiu valoro, inkluzivante sin. Krom ĉi tiuj specialaj okazoj, pli grava bitoj estas konservataj antaŭ malpli gravaj bitoj. Ĉiuj valoroj escepte de ne nombro estas severe pli malgrandaj ol +∞ kaj severe pli grandaj ol -∞.

En malglata proksimumado, la prezento de nombro de IEEE estas proporcia kun ĝia logaritmo de bazo 2, kun averaĝa eraro de proksimume 3%. Ĉi tio estas ĉar la eksponenta kampo estas en la pli grava parto de la datumo. Ĉi tio povas esti uzata en iuj aplikoj.

Ena prezento

redakti

Glitkomaj nombroj estas tipe pakataj kiel la signa bito, la eksponento kaj la mantiso, de maldekstro al dekstro. Por la IEEE 754 la duumaj aranĝoj estas:

Speco Kvanto de bitoj por signo Kvanto de bitoj por eksponento Kvanto de bitoj por mantiso Kvanto de bitoj por tuta nombro Ŝovo de eksponento Bitoj de precizeco
Duona (IEEE 754-2008) 1 5 10 16 15 11
Unuobla 1 8 23 32 127 24
Duobla 1 11 52 64 1023 53
Kvarobla 1 15 112 128 16383 113

La eksponento povas esti pozitiva aŭ negativa, sed en duuma aranĝo ĝi estas konservata kiel sensignuma nombro kiu havas fiksitan ŝovon adiciatan al ĝi. Valoroj de ĉiuj 0 en ĉi tiu kampo estas rezervitaj por la nuloj kaj subnormalaj nombroj, valoroj de ĉiuj 1 estas rezervitaj por la malfinioj kaj ne nombroj. La eksponenta limigo por normaligitaj nombroj estas [-126, 127] por unuobla precizeco, [-1022, 1023] por duobla, aŭ [-16382, 16383] por kvarobla. Normaligitaj nombroj malinkluzivas subnormalajn valorojn, nulojn, malfiniojn kaj NaN-ojn.

En la IEEE duumaj aranĝoj la kondukanta bito de normaligita mantiso ne estas reale konservata (tamen en la supre menciita etendita precizeco la kondukanta bito povas esti konservata).

La signa bito estas 0 por pozitivaj nombroj (z=1) kaj 1 por negativaj (z=-1).

Ekzemple, π, rondigita al 24 bitoj de precizeco, estas:

z=1 ; e=1 ; s=110010010000111111011011 (inkluzivante la latentan biton)

La sumo de la eksponenta ŝovo (127) kaj la eksponento (1) estas 128, tiel la prezento en unuobla precizeca aranĝo estas (malinkluzivante la latentan biton)

0 10000000 10010010000111111011011 = 40490FDB kiel deksesuma nombro.

Specialaj valoroj

redakti
Speciala valoro Signumo Eksponento Mantiso
NaN x 111..111 xxxx...xxx ≠ 0
QNaN x 111..111 1xxx...xxx
SNaN x 111..111 0xxx...xxx ≠ 0
±0 x 000..000 0000...000
±malfinio x 111..111 0000...000
Nenormaligita valoro x 000..000 xxxx...xxx ≠ 0

Negativa nulo

redakti
  Pli detalaj informoj troveblas en artikolo Negativa nulo.

En la IEEE 754 normo, nulo havas signumon, do tie ekzisti ambaŭ pozitiva nulo +0 kaj negativa nulo -0. La du valoroj kondutas kiel egalaj en ciferecaj komparoj, sed iuj operacioj redonas malsamajn rezultojn por +0 kaj -0. Ekzemple, 1/(-0) redonas negativan malfinion, kaj 1/(+0) redonas pozitivan malfinion; ĉi tiuj du operacioj estas tamen akompanitaj per escepto "divido per nulo". Signo-simetria operacio arccot donas malsamajn rezultojn por +0 kaj -0 sen iu escepto. La diferenco inter +0 kaj -0 estas plejparte rimarkebla por kompleksaj operacioj je branĉaj tranĉoj.

Subnormalaj nombroj

redakti
  Pli detalaj informoj troveblas en artikolo Subnormalaj nombroj.

Subnormalaj valoroj enspacas la maltroan breĉon kun valoroj tiaj ke la absoluta distanco inter ili estas la sama kiel por najbaraj valoroj proksime ekster la maltroa breĉo.

Ĉi tio estas plibonigo super la pli malnova praktiko ĝuste havi nulon en la maltroa breĉo, kaj anstataŭi maltroantajn rezultojn per nulo.

Moderna glitkoma aparataro kutime prilaboras subnormalajn valorojn (kaj ankaŭ normalajn valorojn), kaj ne postulas programaran imitadon por subnormalaj valoroj.

Malfinioj

redakti

La malfinioj de la etendita reela nombra linio povas esti prezentitaj en IEEE glitkomaj datumspecoj. Ili estas ne eraraj valoroj en ĉiu vojo, kvankam ili estas ofte (sed ne ĉiam, ĉar ĉi tio dependas de la rondigo) uzataj kiel anstataŭaj valoroj kiam estas troo. Sur divido-per-nula escepto, pozitiva aŭ negativa malfinio estas redonata kiel akurata rezulto. Malfinio povas ankaŭ esti prezentita kiel makroo INFINITY de lingvo C.

IEEE 754 postulas ke malfinioj estas prilaborataj en certa maniero, kiel ekzemple

  • (+∞) + (+7) = (+∞)
  • (+∞) × (-2) = (-∞)
  • (+∞) × 0 = NaN
  Pli detalaj informoj troveblas en artikolo Ne nombro.

IEEE 754 precizigas ke speciala valoro nomata kiel "ne nombro" NaN estu redonata kiel la rezulto de certaj malvalidaj operacioj, kiel 0/0, ∞×0, aŭ rad(-1). Estas reale du specoj de NaN, signalanta SNaN kaj kvieta QNaN. Uzo de signalanta ne nombro en ĉiu aritmetika operacio, inkluzivante ciferecajn komparojn, estas kaŭzo de "malvalida" escepto. Uzo de kvieta ne nombro nur kaŭzas ke ankaŭ la rezulto estas ne nombro.

La prezento de NaN donita en la normo havas iujn neprecizigitajn bitojn, kiuj povas esti uzataj por kodigi la specon de eraro; sed ne estas normo por ĉi tiu kodigo. En teorio, signalanta NaN povas esti uzata per rultempa sistemo por etendi la glitkomajn nombroj kun la aliaj specialaj valoroj, sen malplirapidigo de la komputoj kun ordinaraj valoroj. Tamen ĉi tiaj vastigaĵoj ne aspektas al esti komunaj.

Rondigo

redakti

Rondigo estas uzata kiam la akurata rezulto de glitkoma operacio aŭ konvertado al glitkoma aranĝo bezonas pli multajn ciferojn ol estas ciferoj en la mantiso. Estas kelkaj malsama variantoj de rondigo, aŭ rondigaj reĝimoj. Historie, tranĉo estis la tipa maniero. Ekde enkonduko de IEEE 754, la defaŭlta maniero de rondigo al plej proksima, meza al para, iam nomata kiel bankista rondigo, estas pli kutime uzata. Ĉi tiu maniero rondigas la idealan malfinie precizan rezulton al la plej proksima prezentebla valoro. Aparataro ne bezone komputas la akuratan valoron; ĝi tamen devas produkti la ekvivalentan rondigitan rezulton kvazaŭ ĝi komputis la malfinie precizan rezulton. En okazo de akurate meza rezulto, la valoro kiu faras la paran mantisan finan ciferon estas elektata. La IEEE 754 normo postulas ke la sama rondigo estu aplikita al ĉiuj fundamentaj algebraj operacioj, inkluzivante kvadratan radikon kaj konvertiĝoj, kiam estas nombra (ne ne nombro) rezulto. Ĝi signifas ke la rezultoj de operacioj laŭ IEEE 754 estas plene difinitaj en ĉiuj siaj bitoj, krom la prezento de NaN. Tamen por bibliotekaj funkcioj kiel kosinuso kaj logaritmo ne estas ĉi tia devigo.

Ankaŭ alternativaj rondigaj agordoj estas haveblaj. IEEE 754 precizigas jenajn rondigajn reĝimojn:

  • rondigo al plej proksima, kaj la akurate meza valoro rondigatas al la plej proksima para cifero en la postulita pozicio (la defaŭlta kaj la plej komuna reĝimo);
  • rondigo al plej proksima, kaj la akurate meza valoro rondigatas for de nulo (elektebla por duuma glitkomo kaj kutime uzata por dekuma);
  • rondigo supren (al +∞; negativaj rezultoj tial rondigatas al nulo);
  • rondigo suben (al -∞; negativaj rezultoj tial rondigatas for de nulo);
  • rondigo al nulo (iam nomata kiel kotleta reĝimo; ĝi estas simila al la komuna konduto de konvertado de glitkoma al entjera).

Alternativaj reĝimoj estas utilaj se la kvanto de eraro devas esti barita. Aplikoj kiuj postulas baritan eraron estas mult-precizeca glitkomo, kaj intervala aritmetiko.

La alia okazo de rondigo estas kiam nombro estas eksplicite rondigata al certa kvanto de dekumaj aŭ duumaj ciferoj.

Glitkomaj aritmetikaj operacioj

redakti

Adicio kaj subtraho

redakti

La maniero de adiciado de glitkomaj nombroj konsistas el unue prezentado de ili kun la sama eksponento. En la ekzemplo (dekuma) pli sube, la dua nombro estas ŝovata dekstren je tri ciferoj, kaj tiam eblas daŭrigi la kutiman adician manieron:

a = 123456,7 = 1,234567 × 105 (e=5, s=1,234567)
b = 101,7654 = 1,017654 × 102 (e=2, s=1,017654)
123456,7 + 101,7654 = (1,234567 × 105) + (1,017654 × 102)
= (1,234567 × 105) + (0,001017654 × 105)
= (1,234567 + 0,001017654) × 105
= 1,235584654 × 105
≈ 1,235585 × 105 (e=5, s=1,235585)

1,235584654 × 10^5 estas la vera rezulto, la akurata sumo de la argumentoj. Ĝi estas rondigata al sep ciferoj kaj tiam normaligita se necesas. La fina rezulto estas 1,235585×105. La malplej signifaj 3 ciferoj de la dua argumento (654) estas esence perditaj.

Multipliko kaj divido

redakti

Por multipliki, la mantisoj estas multiplikataj kaj la eksponentoj estas adiciataj, kaj la rezulto estas rondigata kaj normaligita.

a = 4,734612 × 103
b = 5,417242 × 105
ab = 25,648538980104 × 108 (vera produto)
ab ≈ 25,64854 × 108 (post rondigo)
ab ≈ 2,564854 × 109 (post normaligo)

Divido estas farita simile, sed estas pli komplika.

En praktiko, la manieroj per kiuj ĉi tiuj operacioj estas plenumataj en cifereca logiko povas esti sufiĉe komplikaj. Inter la manieroj estas multiplika algoritmo de Booth kaj skemo de Horner.

Esceptaj okazoj

redakti

En glitkoma kalkulado povas okazi problemoj:

  • Operacio povas esti matematike mallaŭregula, kiel divido per nulo; aŭ operacio povas esti matematike laŭregula, sed devus rezulti je kompleksa nombro.
  • Operacio povas esti matematike laŭregula, sed la rezulto povas esti neebla al esti prezentita en la aranĝo, ĉar la eksponento estas tro granda aŭ tro malgranda. Tia evento estas nomata kiel troo (eksponento tro granda) aŭ maltroo (eksponento tro malgranda).

Prezenteblaj nombroj

redakti

Per ilia naturo, ĉiuj nombroj esprimitaj en iu glitkoma aranĝo estas racionalaj nombroj kun finia elvolvaĵo en la elektita bazo. Neracionalaj nombroj, kiel π√2, aŭ ne-finie prezenteblaj racionalaj nombroj, devas esti aproksimitaj. Ankaŭ la kvanto de ciferoj (aŭ bitoj) de precizeco de mantiso limigas la aron de racionalaj nombroj kiuj povas esti prezentitaj akurate.

Kiam iu alimaniere donita nombro estas prezentata en iu glitkoma aranĝo, estas plenumata konvertiĝo. Se la nombro povas esti prezentita akurate en la glitkoma aranĝo do la konvertiĝo estas akurata. Se ne estas akurata prezento tiam la konvertiĝo postulas elekton de tio kiun glitkoman nombron uzi por prezenti la originalan valoron; la prezento elektita tiam havas malsaman valoron ol la originala nombro, kaj la rezulta valoro estas nomata kiel la rondigita valoro.

Ĉu racionala nombro havas finian elvolvaĵon dependas de la bazo. Ekzemple, en bazo 10 la nombro 1/2 havas finian elvolvaĵon (0,5), sed la nombro 1/3 ne havas ĝin (0,333...). En bazo 2 nur racionalaj kun denominatoroj kiuj estas potencoj de 2 (kiel ekzemple 1/2 aŭ 5/16) havas finian elvolvaĵon. Ĉiu racionala nombro kun denominatoro havanta priman faktoron ne egalan al 2 havas malfinian duuman elvolvaĵon. Ĉi tio signifas ke nombroj kiuj ŝajnas mallongaj kaj akurataj kiam estas skribitaj en dekuma aranĝo povas bezoni proksimumadon kiam estas konvertitaj al duuma glitkoma aranĝo. Ekzemple, la dekuma frakcio 0,1 ne estas prezentebla en duuma glitkoma aranĝo de ĉiu finia precizeco; la akurata duuma prezento devus havi ciferojn 1100 daŭratajn senfine:

e = -4; s = 1,100110011001100110011001100110011...

Rondigita al 24 bitoj en duuma unuobla precizeca glitkoma aranĝo ĉi tio estas

e = -4; s = 1,10011001100110011001101

kio estas reale akurate 0,100000001490116119384765625 en dekuma.

La reela nombro π, prezentita en duuma kiel malfinia serio de bitoj estas

11,0010010000111111011010101000100010000101101000110000100011010011...

Kiam rondigita al 24 bitoj ĉi tio estas

11,0010010000111111011011

kaj do rondigita al 24 bitoj en duuma unuobla precizeca glitkoma aranĝo ĉi tio estas

e = 1; s = 1,10010010000111111011011

Ĉi tio havas dekuman valoron de

3,1415927410125732421875

dum kiam la pli preciza proksimumado de la vera valoro de π estas

3,1415926535897932384626433832795...

En ĉi tiaj okazoj la diferenco estas la diskretiga eraro kaj estas limigita per la maŝina epsilono. La aritmetika diferenco inter du najbara prezenteblaj glitkomaj nombroj kiuj havas la saman eksponenton estas la unuo de la lasta cifero. La devigita konduto de aparataro laŭ IEEE estas ke la rezulto estas malsama de la vera matematika je ne pli ol duono de la unuo en la lasta cifero.

Akuratecaj problemoj

redakti

Ĝenerale subtraho de preskaŭ egalaj nombroj povas kaŭzi grandon perdon de akurateco. Ĉi tio estas eble la plej komuna kaj serioza akurateca problemo.

Ekzemple estu donitaj nombroj 123457,1467 kaj 123456,659. Por uzo de 7-cifera dekuma aritmetiko ilin necesas rondigi kiel 123457,1 kaj 123456,7

La rezulto de subtraho de unu el ili el la alia estas tiam 0,4. Sed la plej bona prezento de diferenco de la fontaj nombroj estas 0,4877, kio multe malsamas de la rezulto de glitkoma kalkulado, kvankam relativa rondiga eraro de ĉiu aparta el la du fontaj nombroj estas multe pli malgranda.

En iuj okazoj, la fina rezulto povas esti eĉ nulo, kvankam la akurata rezulto povas esti preskaŭ iu ajn el la prezenteblaj nombroj.

Konsidero de ĉi tiu perdo de signifeco estas unu el gravaj aktualaĵoj en cifereca analitiko.

En adicio kaj subtraho de valoroj kun malsamaj eksponentoj, la malplej signifaj ciferoj de argumento kun pli malgranda eksponento estas esence perdataj. En iuj okazoj sumo de du ne-nulaj nombroj povas esti egala al unu el ili:

a = 123456,7 = 1,234567 × 105
b = 0,009876543 = 9,876543 × 10−3
b = 0,00000009876543 × 105 (post ŝovo)
a+b = 1,23456709876543 × 105 (akurata sumo)
a+b ≈ 1,234567 × 105 (post rondigo kaj normaligo)

Tiel se komputi (...((a+b)+b)+...+b)+b kie adicio de b estas eĉ 106-foja la rezulto ĉiam restas 1,234567 × 105, kvankam la vera rezulto povas esti tute malsama. Ĉi tio estas nomata kiel absorba problemo.

En multipliko aŭ divido ne estadas perdo de signifeco aŭ absorba problemo, kvankam malgrandaj eraroj povas akumuliĝi dum kiam operacioj estas plenumataj multfoje.

Glitkomaj nombroj ne povas precize prezenti ĉiujn reelajn nombrojn, kaj glitkomaj operacioj ne povas precize prezenti verajn aritmetikajn operaciojn. Ĉi tio estas rilatanta al la finia precizeco kun kiu komputiloj ĝenerale prezentas nombrojn.

Ekzemple, la ne-prezentebleco de dekumaj 0,1 kaj 0,01 en duuma glitkomo signifas ke la rezulto de komputado de kvadrato de 0,1 ne estas 0,01, plu ĝi povas eĉ ne esti la prezentebla nombro plej proksima al 0,01. En 24-bita (unuobla precizeco) prezento, 0,1 dekuma estis donata kiel e=-4; s=110011001100110011001101, kio estas

0,100000001490116119384765625 akurate.

Kvadratigo de ĉi tiu nombro donas

0,010000000298023226097399174250313080847263336181640625 akurate.

Kvadratigo de ĝi kun unuobla precizeca glitkoma aparataro kun rondigo donas

0,010000000707805156707763671875 akurate.

Sed la prezentebla nombro plej proksima al 0,01 estas

0,009999999776482582092285156250 akurate.

Ankaŭ, la ne-prezentebleco de π kaj π/2 signifas ke provo de kalkulado de tangento tan(π/2) ne donas rezulton de malfinio, kaj ne estos eĉ troo. Estas ne ebla por norma glitkoma aparataro provi komputi tan(π/2), ĉar π/2 ne povas esti prezentita akurate. Ekzemple la rezulto de tan(π/2) povas esti 16331239353195370 por la duobla precizeco kaj -22877332 por la unuobla precizeco.

Pro la sama kaŭzo, kalkulado de sinuso sin(π) ne redonas nulon. La rezulto estas proksimume 0,1225×10−15 por la duobla precizeco, kaj -0,8742×10−7 por la unuobla precizeco. Sed kalkulado de kosinuso cos(π) redonas -1 akurate. Pro tio ke la derivaĵo de cos estas preskaŭ nulo proksime de π, la efiko de la neakurateco en la argumento estas multe pli malgranda ol la akurateco de prezento de la glitkomaj nombroj ĉirkaŭ -1, kaj la rondigita rezulto estas akurata.

Glitkomaj adicio kaj multipliko estas ambaŭ komutaj (a+b=b+a kaj ab=ba), sed ili estas ne nepre asociecaj. Ĉi tio estas ke (a+b)+c ne estas nepre egala al a+(b+c). Ekzemple uzante 7-ciferan dekuman aritmetikon:

a = 1234,567, b = 45,67834, c = 0,0004
a+b = 1280,24534 kaj rondigatas al 1280,245
(a+b)+c estas komputata kiel 1280,245+0,0004 = 1280,2454 kaj rondigatas al 1280,245
b+c = 45,67834+0,0004 = 45,67874
a+(b+c) estas komputata kiel 45,67874+1234,567=1280,24574 kaj rondigatas al 1280,246

Ili estas ankaŭ ne nepre distribuecaj. Ĉi tio estas ke (a+b)c povas ne esti la samo kiel ac+bc. Ekzemple:

a = 1234,567, b = 1,234567, c = 3,333333
ac = 1234,567 × 3,333333 ≈ 4115,223
bc = 1,234567 × 3,333333 ≈ 4,115223
ac+bc ≈ 4115,223 + 4,115223 ≈ 4119,338
a+b = 1234,567+1,234567 ≈ 1235,802
(a+b)c ≈ 1235,802×3,333333 ≈ 4119,340

Konvertado al entjero estas ne intuicia. Ekzemple konvertado de (63,0/9,0) al entjero povas liveri 7, sed konvertado de (0,63/0,09) povas liveri 6. Ĉi tio estas ĉar konvertadoj al entjero estas ĝenerale tranĉaj sed ne rondigaj al la plej proksima. Planka kaj plafona funkcioj povas produkti respondojn kiu estas je 1 malsamaj de la intuicie atendataj valoroj.

Testado por sekura divido estas problema. Kontrolado ke la dividanto estas ne nulo ne garantias ke en la divido ne estos troo.

Testado por egaleco estas problema. Du komputaj vicoj kiuj estas matematike egalaj povas produkti malsamajn glitkomajn valorojn. Tiel oni ofte plenumas komparojn en iu tolera valoro de malsameco, sed ĉi tio ne nepre solvas la problemon.

Vidu ankaŭ

redakti

Eksteraj ligiloj

redakti