Programim dhe zhvillim, javascript, python, php, html

Si të merrni numërimin e bajtit pjesë të numrit të tipit real të përcaktuar në C duke përdorur GMP

Unë kam trashëguar një projekt të shkruar në C, i cili përdor një lloj numri real të hartuar në një numër me pikë lundruese me saktësi të shumëfishtë nga Biblioteka Aritmetike me Precizion të Shumëfishtë GNU (GMP).

Në kohën e ekzekutimit, për të testuar numrin e bajtit për këtë lloj numri real, mund të ekzekutoj:

printf("Storage size for Real type: %d bytes\n", sizeof(Real));

Jep 24 byte, pra 192 bit.

Sidoqoftë, skedari që përcakton klasën ka gjithashtu linjat e mëposhtme:

#define REAL_EPSILON 1e-24
#define REAL_FORMAT "% 25.24Fe"
#define REAL_IOTA 1e-96
#define REAL_PRECISION 128

A mund të hedhë ndonjë dritë mbi këto linja? Unë jam veçanërisht i shqetësuar nëse rreshti i fundit tregon 128 bit, ose 16 bajt, i jepet numërimit të bajtit për pjesën dhjetore të numrit.

13.02.2017

  • Kjo do të thotë se ka 16 byte për mantisa, por struktura Real përfshin gjithashtu anëtarë për eksponentin dhe shenjën, dhe ndoshta gjëra të tjera. Këto janë 8 bajtët e tjerë. 13.02.2017
  • @Barnar: Më lejoni të sigurohem që t'ju kuptoj: a po thoni që në thelb kam të drejtë kur mendoj se 16 bajt janë për dhjetorin? 13.02.2017
  • Po, mendoj se po. Nëse dëshironi të jeni të sigurt, kontrolloni kodin burimor dhe shikoni deklaratën e strukturës për Real. 13.02.2017
  • Kjo është çështja. Në kodin e projektit, lloji Real u përcaktua nga shkruesi i projektit dhe ai nuk është më i disponueshëm. 14.02.2017
  • Mendova se po e merrnit këtë nga biblioteka GMP. Gjithsesi pse ju duhet autori, nuk e keni kodin burimor? 14.02.2017
  • Lloji Real që përdoret është vetëm për tipin float në GMP. 14.02.2017
  • Në atë rast sizeof(Real) është i njëjtë me sizeof(float), dhe jam i befasuar që është 24 bajt. 14.02.2017
  • Kjo është madhësia e dhënë nga funksioni sizeOf në testimin tim. Është një përshtatje për të lejuar në mënyrë specifike një numër të madh të zerove të mëparshme në mantisa. 14.02.2017
  • E pashë këtë temë duke kërkuar për një zgjidhje tjetër. U bëra kurioz rastësisht për burimin e këtij kodi C dhe gjeta dcs.bbk.ac.uk/site/assets/files/1025/farmer.pdf (redakto: faqe 145). 22.09.2017

Përgjigjet:


1

Ideja prapa GMP, Biblioteka Aritmetike Precize e GNU Multiple, është se ajo mund të trajtojë saktësi shumë (dhe shumë të mëdha). Prandaj, një madhësi fikse që sizeof mund të kthejë për llojin e saj të të dhënave me pikë lundruese nuk ka kuptim.

Numrat GMP zbatohen duke përdorur një strukturë të kokës, me një ose më shumë tregues drejt të dhënave aktuale, ku ruhet numri aktual. Mund të jenë numra shumë të mëdhenj, të ruajtur me mijëra ose miliona bit.

sizeof është një operator i integruar C, dhe ai thjesht jep madhësinë e strukturës së kokës. Ky rezultat thjesht do të thotë që struktura e kokës është 24 bajt. nuk ka të bëjë fare me saktësinë ose numrin e shifrave.

14.02.2017
  • @MrMorgan: Si në mpf_set_default_prec(128);? Kjo do të vendosë saktësinë e paracaktuar të jetë (të paktën) 128 bit. 14.02.2017
  • Më duhet të kontrolloj një udhëzim të tillë të qartë. Çfarë dokumentacioni ekziston thotë se është përdorur një precizion i paracaktuar 128 bit. 14.02.2017
  • Kodi që thërret GMP e vendos atë. Lexo më shumë këtu: gmplib.org/manual/ 14.02.2017
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..