Aksiooma ja liikkuva piste
Piste liikkui, sopimus ei
Kiinteän pisteen aritmetiikka on houkuttelevaa, koska se on rehellistä. Valitset asteikon, kerrot missä piste sijaitsee, ja kone lakkaa teeskentelemästä, että jokainen luku on pieni sääennuste. Tämä tekee toistosta rauhallisempaa, sulautetuista kohteista helpompia järkeillä ja auditoinneista vähemmän riippuvaisia ilmauksista kuten suunnilleen oikein. Ihanaa. Mutta myös keskeneräistä.
Yksi kiinteä asteikko voi olla liian karkea. Valitse asteikko, joka käsittelee hyvin pieniä arvoja, ja suuremmille arvoille loppuu tila. Valitse asteikko, joka käsittelee suurempia arvoja, ja pienet arvot menettävät hyödyllistä tarkkuutta. Voit jakaa työmäärän useisiin tyyppeihin, mutta nyt koodikannassa on erilainen sotku. Onnittelut, desimaalipiste on nyt henkilöstöongelma.
AXIOM on olemassa tapauksia varten, joissa pisteen täytyy liikkua ilman, että numeerinen kerros muuttuu takaisin liukulukusopaksi. Dweve-koodikannassa se on mukautuva muuttuvan pisteen perhe: jokainen konkreettinen arvo sisältää etumerkin, eksponenttilistan indeksin ja mantissan pakattuna 32-bittisenä esityksenä. Eksponentti ei ole ympäristön mielijohteesta riippuva tila. Se valitaan nimenomaisesta listasta. Mantissa on kokonaislukupayload. Esitetty arvo on etumerkki kertaa mantissa kertaa kaksi potenssiin miinus valittu eksponentti. Tämä lause ei ole söpö, mutta se on koko temppu.
Tärkeä osa ei ole se, että piste liikkuu. Liukuluku liikuttaa jo pistettä. Tärkeä osa on se, että AXIOM liikuttaa sitä ilmoitetun listan kautta, jota voidaan tarkastella, testata, erikoistaa ja pitää deterministisenä. Koodi ei pyydä alustaa improvisoimaan numeerista persoonallisuutta. Se antaa arvolle kompaktin sopimuksen ja saa aritmetiikan palaamaan tuohon sopimukseen jokaisen operaation jälkeen.
Lähdekoodissa konkreettinen muoto on Axiom<M, E>. Mantissan leveyden täytyy mahtua esitykseen, ja käytännöllisiä aliaksia ovat esimerkiksi Adp4, Adp8, Adp16, Adp23, AdpNN4 ja AdpNN8. Nämä nimet eivät ole koristeita. Ne kertovat, kuinka paljon payloadia ja minkälaisen eksponenttiprofiilin arvon pitäisi käyttää. Arvo, jolla on NN-muotoinen eksponenttilista, ei ole sama lupaus kuin arvo, jolla on laajempi yleinen lista. Niiden kohteleminen samoina, koska molemmat näyttävät numeerisilta, on tapa, jolla vakavat koodikannat alkavat kerätä perimätietoa.
Muuttuva piste ei ole tunnelmaa
Ilmaus mukautuva muuttuva piste voi kuulostaa siltä, että joku nimesi liukuluvun uudelleen saadakseen hankinnan läpi kokouksessa. Näin ei ole. AXIOM ei tee eksponentista näkymätöntä sivuvaiikutusta. Eksponentti valitaan listasta, joka on liitetty tyyppiin tai strategiaan. Nykyisessä lähdekoodissa konkreettisia eksponenttilistoja ovat tavallinen [16, 8, 4, 0], tiheä [12, 8, 4, 0], neuroverkkojen painot [8, 6, 4, 0] ja hieno lista [16, 14, 12, 10, 8, 6, 4, 0]. Nämä ovat nykyiset lähdekoodin arvot, ja tämä ero on tärkeä, koska lähdekoodi on muuttunut ajan myötä; nykyisten väitteiden tulisi seurata nykyistä koodia, ei vanhentuneita eksponenttilistoja.
Lista on tuotepäätös. Tavallinen lista antaa muutaman leveän kaistan. Tiheä lista muuttaa kaistojen sijaintia. NN-lista on muotoiltu painonkaltaiselle datalle. Hieno lista tarjoaa enemmän läheisiä vaihtoehtoja. Mikään tästä ei poista harkintaa. Se siirtää harkinnan paikkaan, jossa koodikatselmointi voi sen nähdä.
Tämä on ero hallitun adaptiivisen esityksen ja yleisen selityksen välillä. Kiintopistetyyppi sanoo, että jokainen arvo tässä käyttää tätä asteikkoa. AXIOM sanoo, että jokainen arvo tässä valitsee tästä ilmoitetusta asteikkojoukosta. Se on laajempi sopimus, ei puuttuva. Piste liikkuu, mutta se liikkuu kiskoilla. Hyvin hollantilaista, oikeastaan. Jopa desimaalipilkulla on infrastruktuuri.
On syytä olla tarkka siitä, mitä AXIOM ei ole. Se ei ole tarkkaa rationaalilukuaritmetiikkaa. Se ei ole lupa jättää alueanalyysi huomiotta. Se ei ole suorituskykyväite. Se ei ole takuu siitä, että valittu eksponenttilista sopii työkuormaasi, koska lyhenne näytti energiseltä. Sinun on silti ymmärrettävä arvot, dynaaminen alue, hyväksyttävä virhe, käyttöönoton kohde ja toistovaatimukset. AXIOM tekee näistä valinnoista helpommin tarkasteltavia. Se ei saa niitä katoamaan. Päinvastoin, se tekee laiskasta numeerisesta ajattelusta vaikeammin piilotettavaa, ja siitä yleensä huuto alkaa.
Aritmetiikan on palattava kotiin
Lukuesitys on helppo piirtää ja vaikeampi tehdä hyödylliseksi. Hyödyllinen osa on aritmetiikka. Yhteen- ja vähennyslaskun on käsiteltävä arvoja, jotka voivat olla eri eksponenttikaistoilla. Kerto- ja jakolaskun on tehtävä laajempaa kokonaislukumantissa-työtä ennen tuloksen palauttamista kohdemuotoon. Toimenpiteen jälkeen arvo on normalisoitava takaisin käytettävissä olevaan eksponenttivalintaan. Tämä viimeinen vaihe on tärkeä, koska esitys, joka ei voi palata kotiin, on vain loma ulkomailla paremmalla brändäyksellä.
AXIOM-aritmetiikalla on siksi rytmi. Tuo pakatut arvot. Kohdista tai levennä tarpeen mukaan. Suorita kokonaislukupainotteinen toimenpide. Normalisoi. Tallenna tulos takaisin ilmoitettuun muotoon. Jos se ei mahdu, sen pitäisi näkyä esitysongelmana, ei hiljaa koneen mielialan armoilla. Sopimus on hyödyllinen, koska sillä on reunat.
Tästä syystä Numerus on myös tärkeä sen ympärillä. Laajempi pino ei yritä kerätä lukuesityksiä kuin postimerkkejä. Se haluaa aritmetiikkaa, joka kestää toiston, sulautetun käyttöönoton, simuloinnin, mallin pakkaamisen, testit ja auditointijäljet. AXIOM on yksi perhe tuossa tarinassa. Se käsittelee tietyn ongelman: arvot, joiden hyödyllinen asteikko muuttuu, mutta joiden käyttäytymisen on silti oltava determinististä.
Se on tylsä lause, joka pelastaa tiimit myöhemmin: normalisoi takaisin muotoon. Se kuulostaa toteutusyksityiskohdalta, kunnes toisto eroaa, kynnys kääntyy tai pakattu malli käyttäytyy eri tavalla pienemmällä kohteella. Sitten siitä tulee lause, jonka kaikki olisivat toivoneet arkkitehtuuridokumenttiin.
Miksi AXIOM on Numeruksen alla
Julkinen Numerus-tarina on tarkoituksella yksinkertaisempi kuin lähdepuu. Useimmat lukijat haluavat tietää, voiko numeerinen kerros tarjota determinististä aritmetiikkaa, kiintopisteperheitä, desimaalikäyttäytymistä, no_std-asennon, kokonaislukupainotteisia sulautettuja profiileja, varmennuksen ja saman vastauksen kahdesti. He eivät tarvitse jokaista sisäistä tyyppiä ensimmäisellä sivulla. Se ei ole salailua. Se on armollisuutta.
Alapuolella yhteinen numeerinen kerros on leveämpi. Se kantaa binäärisiä, kolmikantaisia, natiiveja ja alibyytin kokonaislukutyyppejä, kiintopistealiaksia, float-tyyppejä yhteensopivuustyötä varten sekä mukautuvaa AXIOMia. Jaetut piirteet antavat näille perheille yhteisen pinnan. Numerus käärii sitten ne osat, joiden on tarkoitus olla tuotepintaisia: binäärinen ja desimaalinen kiintopiste, AXIOM, kokonaisluvut, operaatiot, DSL-pinnat ja verifiointiasenne. Tämä erottelu on tervettä. Perusta voi olla laaja ilman, että julkinen sivu näyttää ravintolan ruokalistalta, joka on menettänyt itseluottamuksensa.
AXIOM ansaitsee oman artikkelinsa, koska se ei ole vain yksi merkintä tuossa listassa. Kiintopisteessä on kyse pisteen asettamisesta yhteen paikkaan. Desimaalisessa kiintopisteessä on kyse tarkoista kymmenkantaisista paikoista. Binääriset ja kolmikantaiset muodot ovat tiiviitä matalabittisiä polkuja. AXIOMissa on kyse siitä, että pisteestä tehdään arvon hallittu osa. Se muuttaa sitä, miten ajattelet esityksestä, aritmetiikasta, testeistä ja käyttöönotosta.
Se muuttaa myös sitä, miten julkisia väitteitä tulisi rajata. AXIOMin suorituskyky kuuluu nykyisille vertailuarvoille nykyisessä koodissa, ei peritylle kansanperinteelle. Leveämpää pinoa ei tulisi kuvata nollan liukulukuoperaation toteutuksena, koska muunnos- ja esityspinnat voivat ylittää sen rajan. Turvallisempi ja tarkempi väite on, että ydinkiintopiste- ja mukautuva aritmetiikka on kokonaislukupainotteista ja suunniteltu deterministiseen käyttäytymiseen. Tuo lause ei ole näyttävä. Hyvä. Näyttävät numeeriset väitteet ovat tapa, jolla kojelaudoista tulee anteeksipyyntögeneraattoreita.
Useita laskentapolkuja, yksi perhe
Konkreettinen pakattu arvo on vasta alku. Lähde sisältää useamman kuin yhden tavan käyttää AXIOMia, koska työkuormat eivät ole niin kohteliaita, että ne mahtuisivat yhteen asetteluun ikuisesti. On olemassa pakattu konkreettinen polku käännösaikaisille eksponenttilistoille. On olemassa Flex<S> ajonaikaista eksponenttitallennusta varten kokonaislukutallennuskokojen yli. On olemassa tensori- ja lohkomuotoja, joissa jaettu eksponenttirakenne voi olla hyödyllinen. On olemassa kerrostettu käsittely. On olemassa APoT, jossa arvot voidaan esittää etumerkillisten kahden potenssien summina, jolloin kertolaskusta voi tulla siirtoja ja yhteenlaskuja. Sen ympärillä on profilointi- ja opittujen eksponenttien tutkimuskoodia.
Tuo hajonta ei ole syy villiin väitteisiin. Se on syy olla huolellinen työkuorman suhteen. Skalaarinen toistopolku, eräkvantisointipolku, tensoria muistuttava polku ja APoT-painopolku kokevat erilaisia paineita. Muistiasettelu, eksponenttien uudelleenkäyttö, alue, normalisointi ja laitteiston muoto ovat kaikki merkityksellisiä. AXIOM antaa sanaston noille valinnoille. Se ei vapauta ketään tekemästä niitä.
Tässä tekniikasta tulee kiinnostavaa. APoT ei ole pelkkä söpö pakkaustemppu. Sopiville arvoille se muuttaa kertolaskun siirto- ja yhteenlaskuongelmaksi. Tensori- ja lohkopolut voivat jakaa eksponenttirakenteen, kun työkuormassa on riittävästi muotoa. Flex pitää ajonaikaisen eksponenttitallennuksen saatavilla, kun tyyppitason listat ovat liian jäykkiä. Yhtäkään näistä ei tulisi valita siksi, että kaavio näytti kivalta. Työkuorma valitsee, tai bugiraportti valitsee myöhemmin ja on paljon vähemmän viehättävä asian suhteen.
Näin arvioit AXIOM-valinnan
Ensimmäinen arviointikysymys on tylsä ja siksi hyödyllinen: miksi ei yksinkertaisempaa lukutyyppiä? Jos arvo on rahaa tai säännelty desimaalimäärä, Decimal voi olla oikea vastaus. Jos vaihteluväli on pieni ja hyvin rajattu, Q-muotoinen kiinteän pisteen tyyppi voi olla rauhallisempi valinta. Jos luku on olemassa vain yhteentoimivuutta varten tiedostomuodon tai ulkoisen rajapinnan kanssa, float-pohjainen tyyppi voi olla rehellinen reunasovitin. AXIOM osoittaa arvonsa, kun työmäärän suuruusluokka vaihtelee, mutta silti tarvitaan deterministinen sopimus ja hyötyä on eksplisiittisestä eksponenttijoukosta.
Toinen kysymys on, kuvaako eksponenttilista dataa vai imarteleeko se vain insinööriä. Neljän leveän alueen lista on erilainen kompromissi kuin hienojakoinen kahdeksan merkinnän lista. NN-muotoinen lista ei ole koristeellinen nimilappu. Se kertoo, että arvojen odotetaan käyttäytyvän kuin painodata. Jos jakauma ei vastaa listaa, esitys toimii silti. Ohjelmisto on usein valmis tekemään väärän asian vaikuttavalla nopeudella. Se ei tee siitä suunnitelmaa.
Kolmas kysymys on, missä normalisointipaine ilmenee. Yhteenlasku kaukaisten eksponenttialueiden välillä voi hylätä yksityiskohtia. Kertolasku voi tuottaa tuloksen, joka tarvitsee eri alueen. Toistuvat operaatiot voivat kasvattaa painetta täsmälleen niissä kohdissa, joissa demo ei käynyt. Arvioinnissa tulisi pyytää rajatestejä nollan ympärille, etumerkin vaihdoksille, eksponenttisiirtymille, suurille mantissoille ja toistuville operaatioille. Jos nämä tapaukset tuntuvat ärsyttäviltä, hyvä. Ne ovat todennäköisesti niitä tapauksia, joilla on merkitystä.
Viimeinen kysymys on, miten esitys jättää jälkiä. Minkä tyyppialiaksen valitsimme? Minkä eksponenttilistan? Minkä mantissan leveyden? Minkä muunnospolun? Mikä oraakkeli tai ominaisuustesti tukee väitettä? Jos vastaus on hajallaan kommenteissa ja optimismissa, järjestelmä on jo menettänyt osan hyödystään. AXIOM on hyödyllisin, kun numeerisesta valinnasta tulee osa arkkitehtuurin dokumentaatiota, ei nokkelaa paikallista temppua, joka on piilotettu kolmen moduulin taakse.
Varmennus voittaa sankariluvut
Numeeriset formaatit houkuttelevat sankarilukuja. Pienempi. Nopeampi. Tehokkaampi. Parempi. Sanat ovat halpoja ja saapuvat yleensä ennen testiympäristöä, mikä on täsmälleen väärä järjestys. AXIOMin kohdalla vastuullinen asenne on käsitellä vertailuarvoja julkaisukohtaisena näyttönä, ei mytologiana. Jos vertailuarvoa ei ole ajettu uudelleen nykyisellä lähdekoodilla, nykyisellä kääntäjällä, nykyisillä lipuilla ja nykyisellä laitteistolla, se ei ole julkinen väite. Se on postikortti aiemmalta iltapäivältä.
Tärkeämpää on varmennusreitti. Pysyvätkö koodaus ja purku sovitun sopimuksen sisällä? Normalisoivatko operaatiot lailliseen muotoon? Käyttäytyvätkö eksponenttirajojen reunatapaukset tarkoituksellisesti? Kattavatko ominaisuustestit ärsyttävät arvot, jotka ihmiset unohtavat, koska ihmisillä on harrastuksia? Onko olemassa korkean tarkkuuden oraakkelia siellä, missä vertailu on mielekästä? Voiko toisto rakentaa uudelleen saman arvopolun?
Tämä viimeinen kysymys on syy siihen, miksi tämä kuuluu pinoomme. Dweve rakentaa jatkuvasti kohti järjestelmiä, joissa laskenta jättää jälkiä: jäsentimiä kuiteilla, kirjanpitoa tyypitetyillä tapahtumilla, hakua deterministisillä poluilla, dataformaatteja, jotka eivät raahaa perässään kärryllistä toistuvia avaimia, sekä simulointi- ja numeerisia kerroksia, jotka voidaan toistaa. AXIOM sopii, koska pisteen siirtäminen ei saisi tarkoittaa kuitin menettämistä.
Opetus
AXIOMin opetus ei ole, että kiinteä piste oli väärin. Kiinteä piste on edelleen yksi puhtaimmista työkaluista, joita meillä on. Opetus on, että yksi kiinteä asteikko ei aina riitä, eikä vaihtoehdon tarvitse olla läpinäkymätöntä liukulukukäyttäytymistä. Arvo voi kantaa hallittua eksponenttivalintaa. Piste voi liikkua, kun sopimus pysyy näkyvissä.
Se on julkinen tarina, joka kannattaa kertoa. Dweve AXIOM pakkaa etumerkin, eksponentti-indeksin ja mantissan. Se valitsee eksplisiittisistä eksponenttilistoista. Se käyttää kokonaislukupohjaista aritmetiikkaa ja normalisoi tulokset takaisin määriteltyihin muotoihin. Sillä on konkreettiset, joustavat, tensor-, lohko-, kerrostettu-, APoT- ja tutkimuspolut koodikannassa. Se kuuluu Numeruksen alle, koska deterministinen aritmetiikka ei ole sivujuoni. Se on osa sitä, miten vakavasti otettavat järjestelmät tuottavat saman vastauksen kahdesti.
Asia muuttuu. Vastuu ei. Se on se hyödyllinen osuus.