figyelmeztetnem kell. Ez hosszú lesz. Eddig ebben a sorozatban is megtalálható;

Egyszer valaki azt mondta nekem, hogy ez egy ezoterikus téma, amely megpróbálja újradefiniálni a mindannyiunk által ismert napi aritmetikát.

Minden rendben van, ha 1+2-t csinálunk. Ez a 3. Amikor azonban megnyitja a fejlesztői eszközök konzolját, és beírja az 1.2-1-et, a 0.199999999999999996 számot kapja. Ha úgy gondolja, hogy ez nem helyes, akkor talán érdekesnek találhatja ezt a cikket.

Kezdjük az alapoktól, majd folytatjuk mindazt, amit egy olyan bolond elme, mint az enyém, el tudott képzelni. Igen, ez a téma fokozatosan egy kicsit kifinomult matematikussá fog fejlődni, de nem kell félnie. Ahogy Silvanus P. Thomspon mondja csodálatos könyvének „Calculus Made Easy” prológusában;

Amit az egyik bolond megtehet a másik.

Nem vagyok matematikus.

Kezdjük el. Szóval mi az 1.2? Természetesen 1+0,2. Szóval mi az a 0,2? Mondhatom, hogy 2/10, vagy mondhatom, hogy egyszerűen 1/5, ami tökéletes lenne. Tehát azt mondhatjuk, hogy az 1.2 valójában 1+1/5. Visszatérve a problémára.

1,2-1 = 0,19999999999999996 a konzolon. azonban

(1+1/5)-1 = 1/5 és ha a konzolon 1/5-öt írsz, akkor 0,2-t kapsz.

Talán jobban számolunk, ha ragaszkodunk a törtekhez. Egy ilyen állítással kezdeni merész dolog, legalábbis egyelőre. Bár ez a fő cél, hosszú út áll előttünk az SCF aritmetika megvitatásáig. Valószínűleg az a legjobb, ha nem innen kezdi, és először néhány alapvető használati esetre összpontosít. Nem kell aggódni, ha készen vagyunk, eljövünk oda. Ebben az első részben merüljünk el az alapokban.

Szóval mit szólnál az 1.21-hez? Nyilvánvalóan 1+0,21, ami 1+21/100. Ez most kicsit szőrös lesz, mert a 21/100 már a legegyszerűbb racionális formában van. Próbáljuk meg szebbé varázsolni. 1 + 1 / (100 / 21). Most ez a 100/21-es rész érdekes. 4+16/21-nek tudom írni. Most megvan ez a 16/21-es rész, amit úgy is írhatunk, hogy 4+1/(21/16). OK most… 21/16 mi ez? 1+5/16. Eddig jó. folytassuk. Ez 1+1/(16/5). Végre a 16/5 ígéretesnek tűnik, hiszen 3+1/5. Most türelemmel rakjuk össze őket. 1+1/(4+1/(1+1/(3+1/ 5)). Más szóval a legdicsőségesebb formájában az 1.21;

Miért tettük mindezt? Azt akartuk, hogy minden számláló 1 legyen. Ha az összes számláló 1-es, akkor van egy SCF. Mivel tudjuk, hogy minden számláló 1-es, hajlamosak vagyunk figyelmen kívül hagyni őket, és az SCF-eket a hasznos részükkel, az együtthatókkal fejezzük ki. Tehát az SCF jelölésben az 1.21 úgy van kifejezve, mint az [1;4,1,3,5], amelyben a pontosvessző előtti szám a teljes részt jelöli.

Egy dolog, amit tudnunk kell, hogy minden decimális számnak csak egyetlen SCF reprezentációja van. Hát majdnem… Ha az utolsó 1/5-re gondol, mindig 1/(4+1/1 )-ként írhatom, ami a következőt adná: [1;4,1,3,4,1] >.

1. szabály: Ha az utolsó együttható 1, akkor hozzáadhatja az előzőhöz.

Tehát OK minden tizedesjegynek egyedi SCF-ábrázolása van, még akkor is, ha kétféle formában van. Ezenkívül minden racionálisnak véges számú SCF-együtthatója van, míg az olyan irracionálisoknak, mint a π, e, ϕ vagy √2, végtelen sok van.

Most, ebben a pillanatban, csak egy észrevételt szeretnék tenni. „Az aritmetika alaptétele” azt mondja ki

Minden 1-nél nagyobb egész szám egyedileg ábrázolható prímszámok szorzataként, a tényezők sorrendjének megfelelően.

Így talán a valós számok világában az SCF együtthatók megközelíthetik a természetes számok világának prímszámait. Tehát ha egyszer beleegyezik abba, hogy a tizedeseket SCF-ként fejezze ki, akkor talán minden természetes szám prímszámnak tekinthető a valós számok világában. Szerintem ez nem mond ellent az irracionálisnak sem, mert tudjuk, hogy végtelenül sok prímszám használható tetszőleges egész szám összeállítására. Úgy értem, semmi sem akadályoz meg abban, hogy a 2*2*…*2 végrehajtásával új összetett számot fedezzen fel.

Gondoljon arra, hogy végtelenül sok "SCF-prím" áll a rendelkezésére, amelyeket nem kell szitálnia vagy prímszámláló függvényt kell használnia π(x) > mint a Riemann Zeta függvény a következő prímszám előrejelzésére. Hasznos lenne ebből a kriptográfia? A biztonságos tizedesjegyek használata egész számok helyett előnyösebb lenne ehhez a feladathoz?

Nahát, nahát. Ne menjünk elébe, és hagyjuk ezt a gondolatkísérletet a matematikusokra. Ennek ellenére szeretném fenntartani a jogomat, hogy erről a pontról egy későbbi részben beszéljek. Szóval jobb, ha nem hagyod ki.

Vissza a témához.

Írja be a következőt:0,5898141775636614

Valamilyen oknál fogva kéznél van ez a decimális szám, és tudni akarjuk, hogy ez minimális tört reprezentáció. Hogyan csináljuk?

Válasz:

  1. Írja ezt: 5898141775636614/10000000000000000
  2. Keresse meg az 5898141775636614 és 100000000000000000 legnagyobb közös osztóját (GCD). Ami 2-nek bizonyul.
  3. Osszuk el a számlálót és a nevezőt is a kapott GCD-vel, és megkapjuk a lehető legegyszerűsített változatot. Ami a következő: 2949070887818307/5000000000000000

Ma már szinte mindenki így csinálja, aki egy kicsit is ismeri a matekot, és ha jobban belegondolunk, nincs vele semmi baj és nem lehet tovább egyszerűsíteni. Helyes, de legtöbbször haszontalan. Gondoljon azonban a 0,5898141775636614 decimálisra és amiben különbözik a 0,5898141775636613902271163110805230509068685853 3275980729525120440467997247075017205781142463867859600825877. 453544390915et a számítógépéhez? Tedd fel magadnak azt is, hogy a fenébe kezdünk egy tizedesjegyhez, például 0,5898141775636614hez? Hacsak nem a 2949070887818307/5000000000000000 határozott tört szorzata, akkor véletlenszerű értéknek vagy közelítésnek kell lennie, amennyire a számítógép elérhető számjegyei megengedik. Mindkét esetben szinte mindig jobban járunk egy elegánsabb minimális racionális forma felfedezésében. Igen az SCF-ek által.

Tudjuk, hogy az egész rész 0, ezért kezdjük a [0;?,?,…] karakterrel, és a 0,5898141775636614 tizedes részre összpontosítunk, a számlálót 1-esre állítjuk, nevezőként pedig a tizedes rész reciprokát használjuk. Így kapjuk meg az SCF együtthatókat tizedesből.

Eddig 0,5898141775636614-ből számoltuk ki [0;1,1,2,3,…]. Ha végig türelmesen számolunk, rájövünk, hogy csak 10 együttható elegendő. Ez [0; 1, 1, 2, 3, 1, 1, 8, 1, 3].

A konvergensek

Ha olyan SCF-et kap, mint a [0; 1, 1, 2, 3, 1, 1, 8, 1, 3]ra és arra kértük, hogy kis gondolkodás után számítsa ki a racionális értékét, természetesen jobbról indulhat. Viszonozzuk, és törtösszeadásként adjuk hozzá az előzőhöz. Úgy értem, 1 + 1/3 = 4/3 viszonozzuk, 3/4 most 8 + 3/4 = 35/4 és így tovább... De az együttható kiszámítása közben balról jobbra haladva jobban járhatunk.

Két konvergenciaállapottal kezdjük, a jelenlegi és az előző. Minden konvergenciaállapot egy racionális, amelyet p/q és p’/q’-ként jelölünk. A kezdőknél p/q 1/0, p'/q' pedig 0/1. Könnyebben látható, ha mátrixban, például jelölésben vannak kifejezve. Minden új együttható, amit felfedezünk, a következő módon alakítja át a mátrixot.

Most, hogy ismerjük a transzformációs képletet, a következőképpen folytathatjuk a konvergensek felfedezését az együtthatókból közvetlenül balról jobbra;

Tehát próbáljuk meg a 857/1453-at a konzolon. Azta..! Ez 0,5898141775636614. De hogyan lehetséges ez egyáltalán? Tudjuk, hogy a 0,5898141775636614 minimális reprezentációja határozottan 2949070887818307/50000000000000000. Nos, a 857/1453 értéke 0,5898141775636614, ameddig számítógépünk dupla pontosságú lebegőpontos számjegyeinek száma megengedi. Igen, a 857/1453 valójában 0,58981417756366139022711631108052305574673090158293186510667584308327598075843083275980758430832759807295490274720495274762049527472 578114246386785960082587749483826565726083964211975223675154852030282174810736407432897459144390.

Most a 857/1453 méltányos ésszerű a 0,5898141775636614 esetén, mert annak ellenére, hogy valóban nagyon jó közelítés, nem tartalmaz olyan lebegőpontos hibákat, mint amilyeneket az 1.2-ben láthatunk. 1 eset.

Azt is észre kell vennünk, hogy míg a konvergensek minden lépésben fel-le oszcillálnak a céltól, nagyon gyorsan csak 10 lépésben konvergálnak 0,5898141775636614re.

OK, itt egy egyszerű decimális SCF (d2CF) JavaScript-kód, amely decimálisból racionális átalakítást végez. Addig számítja az együtthatókat, amíg a számított konvergens és a cél kisebb mértékben tér el, mint a konstansNumber.EPSILON(2.220446049250313e-16). Játssz vele felelősségteljesen :)

Kíváncsi a PI kiszámítására? Talán megpróbálhatja megnézni az összes konvergenst és együtthatót, amíg a 3.141592653589793. Melyek az együtthatók, és szerinted melyik minimális racionális érték adja ezt a számot?

Ne feledje, azt mondtam, hogy minden tizedesjegynek egyedi SCF-reprezentációja van, és a 0,5898141775636614 esetében a [0; 1, 1, 2, 3, 1, 1, 8, 1, 3]. Most azonban már tudjuk, hogy ez valójában a 857/1453, ami csak jó közelítés. Az SCF aritmetika felé tartunk, és használati esetünktől függően előfordulhat, hogy nem közelítéseket, hanem csak pontos számadatokat szeretnénk használni. Ezzel minden olyan hibát kiküszöbölhetünk, amelyek a közelítésekből adódhatnak, különösen több aritmetikai művelet esetén. Tehát hogyan lehet megtalálni a 0,5898141775636614 pontos SCF-jét? Közvetlenül racionális az SCF-átalakításhoz. Más szavakkal, ezúttal nem tizedes, hanem pontos racionális 2949070887818307/5000000000000000. Nevezzük a számlálót n, a nevezőt d, az együtthatót m, a maradékot pedig r-nek.

Lépések

  1. m = Math.floor(n/d)
  2. r = n-m*d (ne használja az _5-öt, mert a negatív racionalitásokkal nem működik)
  3. cs.push(m) Adja hozzá a felfedezett együtthatót az együtthatók tömbhöz.
  4. n=dés d=r
  5. ismételje meg a while (r !== 0).

Íme egy minta JS-kód a racionalitások SCF-vé konvertálásához (r2CF).

Amikor meghívjuk a fenti függvényt, mint például a r2CF(2949070887818307,5000000000000000), a visszaadott együtthatók [0; 1, 1, 2, 3, 1, 1, 8, 1, 2, 1, 48466989132, 1, 22, 1, 2]. 48 milliárd valami a 11. együtthatónál (beágyazott nevező)? Nem csoda, hogy egyesek miért elégednek meg az első 10 kifejezéssel. Azonban itt van a teljes felbontás, amelyet szükség esetén használhatunk.

Mindig bonyolult a tizedesjegyeket SCF-vé konvertálni, mivel többnyire nem tudjuk megmondani, honnan származik a 0,5898141775636614. Ez véges formában vagy közelítésben van. Az 1,333333333333333 esetén logikus a decimális CF konvertálás (d2CF) használata, amely egy lépésben [1;3]-ot ad, néhány mátrix elemi sorművelethez azonban a racionális SCF-re való átváltást használva. konverzió (r2CF) értelmesebb.

Mielőtt elfelejtem. Az utolsó dolog, amit tudni kell az együtthatókról és a konvergensekről. Az együtthatókat felírhatjuk 2x2 mátrixok egymás utáni szorzása formájában is.

Ez most divatos. Igen, még nem tartunk ott, de ezen a ponton csak annyit kell tudni, hogy az SCF-ek közötti alapvető aritmetikai műveleteknél úgy állítjuk elő az eredmény együtthatóit, hogy a két operandus SCF együtthatója között hajtunk végre néhány műveletet. Gyakran előfordul azonban, hogy előfordul egy maradék tört, amelyet külön SCF-vé kell konvertálnunk, és ennek együtthatóit össze kell kapcsolnunk a korábban kapott együtthatókkal. Vagyis az aritmetikai művelet eredményének megállapításához össze kell kapcsolni két együtthatótömböt, pl.

De mi a helyzet a konvergenseikkel. Két listának külön konvergense van, és ha összekapcsoljuk őket, akkor már az elején újra kell számolnunk a végső konvergenst? Természetesen megteheti, de ezt is szem előtt tarthatja

Ez az együttható mátrixábrázolás egyik szépsége.

Mivel láttuk, mik az együtthatók és a konvergensek, talán itt az ideje, hogy felállítsunk néhány szabályt.

2. szabály: Csak az SCF együtthatók teljes része lehet negatív. A pontosvesszőt követő összes többi együtthatónak 0-nál nagyobbnak kell lennie. Az SCF együtthatókon vagy azok között végzett műveletek azonban azt eredményezhetik, hogy az együtthatók némelyike ​​0 lesz. Ebben az esetben a megjelenő 0-kat a következő szabályok szerint kiküszöböljük.

3. szabály: Ha az egymást követő 0-k száma páratlan, akkor adja hozzá a nullákat követő első együtthatót az előző nem nulla együtthatóhoz.[4;1,0, 0,0,3,0,5,1] -› [4;1,0,0,0,3,0,6] -› [4;1,0,0,0,9] -› [4 ;10] Ez a szabály csak a pontosvessző utáni együtthatókra vonatkozik. [0;0,2]-›[2] Ha a kezdeti együttható (a teljes rész) 0, akkor úgy kezelheti, mint egy korábbi nullától eltérő együtthatót.

4. szabály: Ha az egymást követő 0-k száma páros, akkor csak dobja a nullákat.[4;0,0,3,0,5,1] - › [4;0,0,3,0,6] -› [4;0,0,9] -› [4;9]Ez a szabály csak a pontosvessző utáni együtthatókra vonatkozik. [0;0,0,2]-›[0;2]

5. szabály: Ha véletlenül 0-t kap a legvégén, csak dobja el az együtthatóval együtt. Ezzel egyik munkámban sem találkoztam, de az utolsó együttható 0 egyszerűen ezt jelenti;

So [3;2,4,0] = [3;2]

SCF tagadása: Ez vicces. Csak fel tudom mutatni a szabályt, és te elfogadod, vagy talán jobb, ha visszatérsz az általános iskolás korba, és felidézed a vegyes törtek számtanát.

Igazán? Nos, az én könyvemben nem azért, mert a vegyes tört beágyazott hozzáadással jár, ami azt jelenti, hogy a törtrésznek pozitívnak kell lennie. Hadd írjam át ezt a dolgot.

6. szabály:SCF tagadása,

  1. Negáljuk a teljes részt (az első együtthatót), és vonjuk ki az 1-et.
  2. Szúrjon be egy 1-est közvetlenül a pontosvessző után
  3. Vonja le az 1-et az együtthatóból közvetlenül a 2. lépésben beillesztett 1 után
  • -1 . [2;2] = [(-2-1);1, (2-1)] =[-3;1,1] = [-3;2] amely a fent megadott példa az SCF-ben . Íme egy másik példa
  • -1 . [1;1,3] = [-2;1,0,3] = [-2;4]és valóban

7. szabály:SCF invertálása (reciprok)

Ez egyszerűen egy 0 balról történő beszúrásával érhető el.

2/5 = [0;2,2] -unshift-nulla-› [0;0,2,2] -3. szabály-[2;2] -› 5/2

OK, szerintem egyenlőre elég. A "II. részben" azonban a négyzetgyökök és a másodfokú irracionalitások és miegymások felé indulunk.