Beth yw beth? · bei.pm

Mae'r testun hwn wedi'i gyfieithu'n awtomatig gan OpenAI GPT-4o Mini

Mewn y rubrick yma mae erthyglau am fformatau ffeiliau a pheirianneg wrthdro.

Nawr, mae'n rhaid i ni ddeall:
Mae llawer o iaith raglennu y tu allan ac mae llawer o bobl yn adnabod rhai pethau dan enwau hollol wahanol - neu hyd yn oed ddim syniad am bresenoldeb pethau sylfaenol oherwydd bod eu iaith raglennu wedi eu hatgynhyrchu oddi wrthynt.

tl;dr:
Mae fy nhodiad yn seiliedig yn fras ar C99 <stdint.h>. Bydd unrhywun sy'n gallu deall y nodiad hon yn sicr yn llwyddo gyda'm nodiad i.

Cyfrol

Integer yw rhifau cyfan, sy'n golygu rhifau heb rannau degol.

Mewn gwirionedd, mae Integer fel arfer yn cael eu diffinio yn fformat data o fewn spectrwm rhif penodol, fel rhyw fath o ddatrysiad. Rwy'n rhoi hyn yn bitiau - oherwydd bod "Byte" a types sy'n seiliedig arno (Word, Qword, ...) fel arfer yn dibynnu ar y llwyfan.

Hefyd, mae'r types Integer yn cael eu gwahaniaethu rhwng rhai naturiol (ℕ, sy'n golygu, heb arwydd - Unsigned) a rhifau cyfan (ℤ, sy'n golygu, gyda arwydd - Signed).
Mae'r wybodaeth hon yn amlwg trwy arwydd yn y dynodwr (u neu s).

Mae'n bosibl bod rhifau cyfan gyda arwydd yn cael eu cynrychioli fel unwaith ateb neu fel dwywaith ateb.
hyd nes ei fod yn cael ei nodi fel arall, defnyddir dwywaith ateb, gan ei fod yn ffurf fwyaf dymunol yn y gwyddor gyfrifiadurol modern.

Rwy'n nodi rhifau heb arwydd yn fy nghyfrolau fel uint, gyda'r manylion am fanwlteithrwydd yn Bits yn dilyn.
Rwy'n nodi rhifau gyda arwydd yn fy nghyfrolau fel sint, yn yr un modd gyda'r manylion am fanwlteithrwydd yn Bits.

Rwy'n dewis peidio â defnyddio'r math data "char" ar gyfer cymeriadau, gan mai cyfyngiadau rhifau cyfan yn unig sy'n cynrychioli rhestr o gymeriadau gyda dehongliad penodol.
Felly, cynrychiolir y rhain fel uint(8)[].

Enghreifftiau:

Notation C99 stdint.h-Cyfwerth Disgrifiad Ardal Rhifau
uint(16) uint16_t Integer Di-arnau, 16 Bit hyd 0 - 65.535
sint(8) int8_t Integer Dros-arnau, 8 Bit hyd, Cyd-drawiad Dau -126 - 127
uint(24) uint32_t:24 Integer Di-arnau, 24 Bit hyd 0 - 16.777.216

Gwerthoedd Festkomma

Gwerthoedd sefydlog yw gwerthoedd rhifol o'r sbectrwm o Rhifau Rhydd (Q), sydd felly yn cynnwys coma a digidau ar ôl y coma.

Yn y gwerthoedd sefydlog, mae - dyna pam y galwyd felly - lleolaeth y coma wedi'i gosod yn sefydlog gan y math data.
Mae hyn hefyd yn golygu bod ardal benodol o rifau ar gyfer y math data hwn; yn feddyliol, mae'r ardal rifau yn derfynol.

Mewn gwirionedd, defnyddir y math data hwn yn bennaf ar lwyfannau sydd heb ddigon o gyflymder mewn cydrannau rhifau fflach, gan y gall y cyfrifiad o werthoedd sefydlog gael ei wneud gan gydrannau cyfan.

Defnyddir y math data hefyd gan systemau rheoli cronfeydd data, pan fo gofynion sefydlog yn rhaid eu bodloni.
Gellir meddwl am systemau ar gyfer storio data ariannol yn barhaol; mae'r rhan fwyaf o arian yn gyfyngedig i 2 digid ar ôl y coma. (Dydy hi ddim yn ddoeth cymryd gwerthoedd sefydlog ar gyfer hyn; mae'n fwy doeth storio'r uned ariannol leiaf fel cyfan a gadael y gweddill i'r llwyfan arddangos)

Yn debyg i'r cyfeiriadau cyfan, rwy'n rhoi'r gwelliant y rhif o flaen a thros y coma:
ufixed(9,7) yw math data sy'n neilltuo 9 bit ar gyfer y gwerth o flaen y coma, a 7 bit ar gyfer y gwerth ar ôl y coma; felly, mae'n eang o 16 bit yn gyfan, a gall, er enghraifft, fel fector o ddau gyfan annibynnol, ddal ardal o (0,0) i (511,127).
Fodd bynnag, byddai'r dehongliad hwn yn rhoi 28 rhif yn ddi-ddefnydd yn ei ddangosfa ddigidol, gan y byddai'n debyg y byddech yn cyfyngu i (511,99) yn ymarferol.

Yn lle dehongliad uniongyrchol o'r gwerth sefydlog fel fector o 2 cyfan ar wahân - sy'n golygu y byddai bob amser yn golygu ardal ddi-ddefnydd wrth drosi i rifau digidol a throsglwyddo llaw - gellir dehongli'r ardal ar ôl y coma fel fractio o'i holl welliant.
Ar gyfer y ufixed(9,7) a grybwyllwyd, mae hynny'n arwain at fractio gyda denominator o 27 - mae'r ardal rifau yn mynd o 0.00 i 511 + 126127 I drosi i ddangosfa ddigidol, byddai'n rhaid rhannu'r digid ar ôl y coma gyda 128.
Gyda'r fersiwn hon, mae'n haws cynnal gweithrediadau cyfrifo, gan fod y trosglwyddo'n digwydd yn awtomatig, gan wneud y fersiwn hon fel arfer dewis cyntaf.
Fodd bynnag, mae gan y fersiwn hon y gwanwyn mai ni all digidau ar ôl y coma yn y ddangosfa ddigidol fod â gwelliant gwarantedig, felly ni fydd digid unig yn cyfateb i 0.01, ond 0.007874, sy'n arwain at gamgymeriadau croni.

Bydd y dull dehongli a ddefnyddir yn cael ei ddogfenni yn unol â'r lleoliad defnydd.

Gwerthoedd llifo neu gwerthoedd symudol

Gwerthoedd llifo yw mynegiadau mathemategol mwy cymhleth, lle caiff rhif cyfan gyda datrysiad penodol ei fynegi trwy derm mathemategol fel y caiff y rhan ar ôl y degolyn ei ffurfio trwy symudiad - gan ddibynnu ar enw gwyddonol yn uniongyrchol.
Y ffordd fwyaf cyffredin i'w gweithredu yw wedi'i standardio gyda IEEE 754 ac mae wedi'i gydnabod yn rhyngwladol ers hynny.

Mae gwerth llifo fel arfer yn cynnwys y cwmponentau canlynol:

Arwydd (0 neu 1) Exponent Mantisse

Tra gellir deall arwydd fel gwybodaeth biniog Ie/Nac, ffurfiwyd y rhif go iawn trwy'r hafaliad
Mantisse * 2Exponent

Ychwanegol i hyn, mae yna gyfres o werthoedd cyson sy'n gorchuddio achosion arbennig o rifau rhesymol - gan gynnwys ±∞ a NaN ("dim rhif dilys").

Mae gwerthoedd llifo yn arbennig o ddefnyddiol pan nid yw'r cywirdeb mor bwysig, gan y bydd yn y math hwn o werthoedd yn anochel yn digwydd camgymeriadau cronnus a thrwy hynny golli cywirdeb. Fel arfer, defnyddir gwerthoedd llifo er enghraifft i ddiffinio cydordd, fel fectorau vertex mewn modelau 3D neu gromlinau Bézier/Spline at ddibenion cynrychioliadol.

Mewn fformatau data, mae gwerthoedd llifo wedi'u penodi fel float(Mantisse, Exponent).
Os defnyddir fformat sy'n wahanol i IEEE 754, bydd hyn yn cael ei nodi yn unol â hynny.