Ad argvmentvm transi
Topos Uranos

Svmmarivm

Programma qvod falsvm eventvm reddit non versibvs temere mvtandis corrigitvr, sed investigando. Haec lectio emendationem vt methodvm experimentalem exhibet: defectionem iterare, hypothesin de eivs cavsa formare, experimentvm designare qvod eam confirmet vel reiciat, et locvm erroris circvmscribere; bisectio evm invenit nvmero gradvvm qvi vt logarithmvs magnitvdinis programmatis crescit. Instrvmentvm explicat (compilationem cvm -g et sine optimizatione, configvrationem Visual Studio Code in tribvs systematibvs et sessionem veram GDB qvae ostendit qvid editor svbter faciat), pvncta interrvptionis simplicia et condicionalia, progressvm gradatim, acervvm vocationvm et inspectionem statvs, cvm exemplo centrali: mediana qvae solvm cvm nvmero pari datorvm fallit. Conclvditvr strategiis qvae plvs valent qvam instrvmentvm (casvm minvere, vltimvm pvnctvm rectvm qvaerere, invariantes per assert examinare, relationem detectoris legere) et tribvs casibvs: errore vnivs, recvrsione qvae non terminatvr et referentia irrita facta.

Proposita discendi

  1. Compilationem cvm informatione emendationis (-g, sine optimizatione) configvrare et emendatorem ex Visual Studio Code in systemate proprio incipere.
  2. Pvnctis interrvptionis simplicibvs et condicionalibvs, exsecvtione gradatim (intrare, transilire, exire) et inspectione variabilivm, expressionvm et acervi vocationvm vti.
  3. Strategiam systematicam (iterare, minvere, bisecare, hypotheses formare et experiri) adhibere ad errorem datvm inveniendvm, vnamqvamqve hypothesin scripto mandando.
  4. Emendatorem cvm detectoribvs et cvm tentaminibvs conivngere ad errorem memoriae ex relatione eivs inveniendvm.

Emendare est investigare

Error et defectio

Defectio est id qvod observatvr: eventvs falsvs, programma qvod non terminatvr, relatio detectoris. Error (sive vitivm) est cavsa: versvs, condicio vel consilivm designationis qvod specificationi non respondet. Defectio videtvr; error inveniendvs est, et ab ea longe abesse potest. Ex qvo seqvitvr vt qvi ibi corrigit vbi defectio videtvr, exempli gratia 2 ab eventv svbtrahendo qvia «semper 2 plvs exit», symptoma corrigat et cavsam relinqvat, qvae cvm aliis datis redibit.

Si hoc ita est, emendare est investigatio de cavsa, et eivs methodvs est scientiarvm experimentalivm:

  1. Observare et iterare. Defectionem accvrate describere (qvo introitv, qvid exspectatvm sit, qvid obtentvm) et efficere vt qvotiens libet eveniat. Error qvi iterari non potest investigari non potest, neqve confirmari potest evm correctvm esse.
  2. Hypothesin formare. Affirmatio de cavsa qvae falsa evadere possit: «ordinatio non ordinat», «index secvndi dati medii vno maior est».
  3. Experimentvm designare. Pvnctvm programmatis eligere et praedicere qvem statvm ibi videri oporteat si hypothesis vera est, et qvem si falsa.
  4. Conclvdere et circvmscribere. Hypothesin reicere vel confirmare; vtroqve casv tractvs svspectvs minvitvr. Repetitvr donec tractvs vnvs versvs sit.

Methodvs avtem disciplinam postvlat: vnam tantvm rem simvl mvtare, vnamqvamqve hypothesin cvm eventv svo notare, et codicem non tangere dvm nescitvr qvid qvaeratvr. Versvs temere mvtare donec exitvs bonvs videatvr defectionem occvltare potest errore non svblato.

ExemplvmMediana cvm nvmero pari datorvm

Mediana elenchi datorvm est datvm medivm elenchi ordinati si nvmervs impar est, et media dvorvm mediorvm si par est. Lectio Temptare ostendit tentamina detegere qvando fvnctio deficiat, non avtem vbi eivs error sit. Fvnctio seqvens tentamen cvm qvinqve datis svperat, non cvm qvattvor.

Programma in C++
#include <algorithm>#include <cstddef>#include <print>#include <vector>​// Mediana elenchi datorvm.// Praecondicio: values vacvvs non est.// Postcondicio: datvm medivm elenchi ordinati reddit, vel mediam dvorvm mediorvm.double median(std::vector<double> values){    std::ranges::sort(values);    const std::size_t n{values.size()};    const std::size_t middle{n / 2};    if (n % 2 == 1) {        return values[middle];    }    return (values[middle] + values[middle + 1]) / 2.0;}​int main(){    const std::vector<double> odd{7.0, 1.0, 5.0, 3.0, 9.0};    const std::vector<double> even{7.0, 1.0, 5.0, 3.0};    std::println("Mediana elenchi {}: {}", odd, median(odd));    std::println("Mediana elenchi {}: {}", even, median(even));}
Exitvs
Mediana elenchi [7, 1, 5, 3, 9]: 5Mediana elenchi [7, 1, 5, 3]: 6

Observatio accvrata est: cvm {7,1,5,3}\{7, 1, 5, 3\}, ordinatis {1,3,5,7}\{1, 3, 5, 7\}, exspectabatvr (3+5)/2=4(3 + 5)/2 = 4 et obtentvm est 6; cvm qvinqve datis eventvs rectvs est. Tres saltem hypotheses admitti possvnt: (H1) ordinatio non ordinat; (H2) indices dvorvm datorvm mediorvm falsi svnt; (H3) svmma vel divisio male scripta est. Vnaqvaeqve alivd praedicit in versv 17, anteqvam peragatvr: si H1 vera est, values ordinatvs non est; si H2, values[middle] et values[middle + 1] non svnt 3 et 5; si H3, dvo data svnt 3 et 5 et tamen compvtatio 6 dat. Qvod casvs impar recte se habet H1 improbabilem reddit, sed «improbabilis» non est «reiecta»; experimentvm, cvm emendatore, est programma in versv 17 sistere et inspicere.

Bisectio

Cvm nvlla hypothesis clara est, restat methodvs qvae non fallit: bisectio. Ponitvr statvm programmatis initio rectvm esse et in fine falsvm, et in qvoqve pvncto intermedio decerni posse vtrvm rectvs sit (evm cvm valore manv compvtato comparando, vel invariantem examinando). Statvs in medio tractv svspecto examinatvr: si rectvs est, error in posteriore dimidia parte est; sin minvs, in priore. Est qvaesitio binaria lectionis Qvaerere et ordinare, ad versvs programmatis adhibita (vel ad gyros circvitvs, vel ad versiones plicae).

Figvra bisectionem sedecim versvvm seqvitvr, errore in versv 11 posito; qvaeqve linea experimentvm est de statv post illvm versvm: rectvs (✓) vel falsvs (✗).

Demonstratio

  1. Initio omnes sedecim versvs svspecti svnt: scitvr statvm ante versvm 1 rectvm esse et post versvm 16 falsvm.

  2. Post versvm 8 statvs rectvs est: versvs 1 ad 8 absolvvntvr.

  3. Post versvm 12 statvs iam falsvs est: error inter versvm 9 et versvm 12 est.

  4. Post versvm 10 rectvs: restant versvs 11 et 12.

  5. Post versvm 11 falsvs: vltimvm pvnctvm rectvm et primvm falsvm vicina svnt, et error in versv 11 est.

Nvmeratio est qvaesitionis binariae: qvodqve experimentvm tractvm bifariam dividit, ita vt kk experimenta pro 2k2^k versibvs svfficiant. Pro programmate mille versvvm decem svfficivnt, qvia 210=10242^{10} = 1024. Vnde commodvm methodi: svmptvs eivs vt logarithmvs magnitvdinis crescit, nec totvm programma intellegere postvlat, sed in pvncto decernere scire vtrvm statvs debitvs sit. Haec avtem decisio pars difficilis est: specificationes et invariantes svnt criterivm qvo qvisqve statvs intermedivs ivdicatvr.