Svmmarivm
Nvmeri cvm digitis decimalibvs programmatis non svnt nvmeri reales mathematicae: svnt svbcopia finita nvmerorvm rationalivm qvorvm denominator est potentia nvmeri 2, et qvisqve valor qvi ad eam svbcopiam non pertinet svbstitvitvr proximo qvi pertinet. Haec lectio perscrvtatvr qvomodo nvmervs virgvlae flvitantis in 64 bit servetvr (signvm, exponens et mantissa), cvr repraesentationem exactam non habeat et qvi valor eivs locvm occvpet, qvot digiti in float et in double tvti sint, qvomodo errores rotvndationis accvmvlentvr, cvr dvo nvmeri reales per == non comparentvr et qvomodo cvm tolerantia ivstificata comparentvr, et qvid sint infinitvm et valor non nvmericvs qvos forma reservat eventibvs qvi non capivntvr vel non exsistvnt.
Proposita discendi
- Explicare cvr repraesentationem binariam exactam non habeat et qvi valor eivs loco servetvr.
- Praedicere effectvm rotvndationis in svmmis iteratis et in svmma nvmerorvm magnitvdinis valde diversae.
- Nvmeros reales cvm tolerantia idonea loco
==comparare, electionem tolerantiae ivstificando. - Inter
floatetdoublesecvndvm praecisionem reqvisitam eligere, et infinitvm valoremqve non nvmericvm agnoscere.
Notatio scientifica in basi 2
Lectio Nvmeri integri eorvmqve repraesentatio ostendit integrvm bitorvm exacte valores consecvtivos repraesentare. Atqvi nvmeri cvm digitis decimalibvs difficvltatem aliam affervnt: inter dvos nvmeros reales qvoslibet infiniti alii svnt, nec vllvs nvmervs finitvs bitorvm omnes distingvere potest. Solvtio qvam omnia compvtatra hodierna adhibent eadem est qva scientia magnitvdines valde magnas vel valde parvas scribit: notatio scientifica. In basi 10, distantia media Terrae a Sole scribitvr metra; nvmervs habet signvm, pavcos digitos significantes (mantissam, ) et potentiam basis (exponentem, ), qvae dicit vbi virgvla ponatvr. Qvod si ita est, nvmero fixo digitorvm magnitvdines ordinvm valde diversorvm tegvntvr, eo pretio vt cvivsqve soli primi digiti serventvr.
Compvtatrvm idem in basi 2 facit. Qvisqve nvmervs a nihilo diversvs vno tantvm modo scribitvr vt
vbi est signvm (0 pro positivo, 1 pro negativo), est mantissa binarie scripta, cvivs primvs digitvs semper est 1, et est exponens. Qvod primvs digitvs semper est 1 conseqventiam practicam habet: evm servare non oportet, et bit qvod sic parcitvr praecisioni lvcro est. Nomen virgvla flvitans hanc ipsam formam describit: virgvla non locvm fixvm inter digitos occvpat, sed secvndvm exponentem «flvitat».
Genvs double lingvae C++ in omnibvs compilatoribvs hodiernis formam binariam praecisionis dvplicis internationaliter normatam adhibet, 64 bitorvm: 1 bit pro signo, 11 bit pro exponente et 52 bit pro mantissa, sine digito initiali. Exponens dislocatvs servatvr: campvs 11 bitorvm continet , ita vt valores sine signo ab 1 ad 2046 servet pro exponentibvs a ad (valores 0 et 2047 campi reservantvr nihilo, nvmeris valde parvis, infinito et valori non nvmerico, qvi in fine lectionis videbvntvr). Genvs float formam praecisionis simplicis adhibet, 32 bitorvm: 1 signi, 8 exponentis et 23 mantissae.
Bit alicvivs double videri possvnt. Programma seqvens adhibet std::bit_cast, ex capite <bit>, qvod 64 bit nvmeri vt integrvm sine signo 64 bitorvm denvo interpretatvr, nvllo mvtato; hic sine vlteriore explicatione adhibetvr, vt instrvmentvm ad memoriam inspiciendam. Specificatio formae {:064b} illvm integrvm binarie cvm 64 digitis scribit, vt in lectione priore, et {:016X} hexadecimaliter cvm 16.
#include <bit>#include <cstdint>#include <print>int main(){ const double tenth{0.1}; // 64 bit nvmeri, vt integer sine signo lecta. const std::uint64_t bits{std::bit_cast<std::uint64_t>(tenth)}; std::println("{:064b}", bits); std::println("{:016X}", bits);}00111111101110011001100110011001100110011001100110011001100110103FB999999999999AFigvra 64 bit qvae programma scripsit congregat et campvm post campvm legit.
Demonstratio
64 bit, hexadecimaliter
3FB999999999999A. A sinistra ad dextram legvntvr: 1 bit signi, 11 exponentis et 52 mantissae.Signvm est 0: nvmervs est positivvs.
Campvs exponentis, binarie, valet 1019; ei svbtrahitvr dislocatio, 1023, et exponens est .
Mantissa, cvm 1 initiali qvod non servatvr, binarie est : grex repetitvr et vltimvs grex, , svrsvm rotvndatvs est. Eivs valor est circiter .
Nvmervs servatvs est , id est : valde prope , sed non .
Argvmentvm oneratvr…