Posted on Leave a comment

APPLE tartozó osztály

[Paul Curtis] több mint a Segger egy érdekes sorozat blogbejegyzések kiszámítása részlege. Ez szokott lenni egy melegebb téma, de ma már sok számítógép vagy számítógépes nyelven támogatják a szorzás és osztás beépített. de néhány processzorok hiányzik az utasításokat, és a könyvtár nem lehet, hogy kevesebb, mint ideális. tudta, hogyan kell dobni a saját esetleg lehetővé teszi, hogy optimalizálja a sebesség vagy a térben. A jelenlegi részlet burkolatokat Newton algoritmust csinálni részlege.

Steve Martin volt egy híres kicsit arról, hogy, hogy egy milliomos és nem fizet adót. Ő kezdte el, mondván: „Első … kap egy millió dollár. Akkor …”Ez a módszer egy kicsit, mint hogy mivel először meg kell tudni, hogyan kell a többszörösen mielőtt oszthatjuk. Az alapelv az, kettős: Newton-módszer segítségével finomíthatja becslést a kölcsönös egymást követő szorzásra, majd megszorozzuk a szám kölcsönös megegyezik elosztjuk. Más szóval, ha kell osztani 34 6, akkor átírják 34/6 34 * 1/6 és a válasz ugyanaz.

Newton közelítés reciprokokat lehetővé teszi hogy egy kitalálni a választ, majd finomítani azt egy sor szorzásra. Minden szorzás teremt jobb pontosságot. Akkor használja ezt, hogy végre egy klasszikus sebesség / tér trade-off. Például nézzük csak feltételezzük azt akarjuk, hogy megtalálják a kölcsönös egy byte (feltehetően egy fix pont byte). A look-up table 256 elem adna tökéletes pontossággal, és nagyon gyors. Nincs több matematikai van szükség. de mi a helyzet a 32 bit? most az asztal egyszerűen túl nagy. de ki lehet válogatni, mondjuk, az első 8 bit a 32 bites szám. Vagy több. Vagy kevesebb. attól függ, hogy mi a fontos neked.

Tehát most van egy rossz becslést a kölcsönös. Sir Isaac lehet jobbá tenni. Egyes szám, Veszel a becslés (x) és a többszörösen össze őket. Vonja ez a szám 2, és van egy tényező, hogy szaporodnak a régi becslése szerint, hogy egy új becslés. Ugró előre meg kell állapítani, ha a becslés helyes, a szorzás adna meg 1 ami nem változtatja meg a régi becslés egyáltalán. Ha a becslés ki van kapcsolva, akkor kap egy korrigáló tényező.

Mivel a képlet így néz ki:

X = X * (2-A * x);
Tehát, ha úgy dönt, a kölcsönös 22 lehet 0,02, az első lépés kapsz:

0,02 * (2-22 * 0,02) = 0,0312

0,0312 * (2-22 * 0,0312) = 0,0410

0,0410 * (2-22 * 0,0410) = 0,0450
A helyes válasz ismétlődő tizedes 0.0454545 és ha folyamatosan megy, akkor oda.

Persze, akkor meg kell halmozottan még egy ideje, hogy a szétválás.

Tetszett, hogy a poszt van egy fix pont végrehajtását, majd megvizsgálja a kapott kódban ARM RISC-V és dsPIC30. Érdemes elolvasni.

Szeretjük matematikai trükkök tudjuk használni assembly nyelven. Ha dolgozik az AVR és lebegőpontos, ne hagyja ki ezt a módszert.

Leave a Reply

Your email address will not be published. Required fields are marked *