Har försökt att googla fram en algoritm för att konvertera binära flyttal till decimala, men inte hittat något bra. Hoppas någon här kan hjälpa.
Det gäller alltså att konvertera ett tal i formatet binär mantissa, binär exponent till ett tal i formatet decimal mantissa, decimal exponent.
Jag letar alltså efter en tydlig och klar beskrinvning av hur det går till, inte efter några färdiga kodfragment. Text på engelska är givetvis OK.
flyttalskonvertering
Detta är väl iofs mest kodfragment, men den förklarar ju en del:
http://beej.us/guide/bgnet/output/html/ ... ialization
http://beej.us/guide/bgnet/output/html/ ... ialization
Det är nog inte riktigt det jag söker, frågan var dåligt formulerad. Det handlar om att skriva ut ett binärt flyttal. Alltså att bygga upp subrutinen som utför denna uppgift, inte att anropa en färdig sak i c eller liknande.
Grundproblemet är att göra om t.ex. 2^18 till k * 10^n där n är ett heltal och 1<k<10.
Det enda jag kommer på är att dela exponenten med konstanten 1/log(2). Heltalsdelen av detta är n och k fås genom att beräkna 10^decimaldelen. Det finns kod för att beräkna icke heltalsexponenter, men är detta verkligen bästa sättet och så som det brukar göras?
Grundproblemet är att göra om t.ex. 2^18 till k * 10^n där n är ett heltal och 1<k<10.
Det enda jag kommer på är att dela exponenten med konstanten 1/log(2). Heltalsdelen av detta är n och k fås genom att beräkna 10^decimaldelen. Det finns kod för att beräkna icke heltalsexponenter, men är detta verkligen bästa sättet och så som det brukar göras?
Det skall användas till PIC18 och det mesta är redan klart. Räknandet i binärformat fungerar som det skall inklusive trig och log. Avrundningsfel o.dyl. är inget poblem, där är massor med marginal vad gäller precision. Skulle så behövas är det dessutom bara att lägga på en byte till och fortsätta använda enkel trunkering utan krångel.
Även visningen fungerar som det är, men metoden känns väldigt klumpig.
Det är skrivet från scratch efter uppgifter från en gammal bok om hur man gör serieutvecklingar av de aktuella funktionerna. Är säkert inte optimalt, men räcker till.
Även visningen fungerar som det är, men metoden känns väldigt klumpig.
Det är skrivet från scratch efter uppgifter från en gammal bok om hur man gör serieutvecklingar av de aktuella funktionerna. Är säkert inte optimalt, men räcker till.
Kollade hur printf() ser ut i avr-libc-1.6.2
Algoritmens kärna finns i ftoa_engine.S, en assemlerfil på 532 rader med ett 40-tal långa konstanter tabellerade.
Orkar inte sätta mig in i koden i detalj, men den finns öppen och tillgänglig, dock ej GPL. Antar att det finns motsvarande för PIC(??)
God Jul!
Algoritmens kärna finns i ftoa_engine.S, en assemlerfil på 532 rader med ett 40-tal långa konstanter tabellerade.
Orkar inte sätta mig in i koden i detalj, men den finns öppen och tillgänglig, dock ej GPL. Antar att det finns motsvarande för PIC(??)
God Jul!
Har tänkt på möjligheten med tabeller, översätta den binära exponenten till en decimal plus multiplikator. Har ännu inte tittat om det är så de har gjort där, men skall göra det. Tack för tipset.
Koden får inte innehålla ens en halv bit GPL, eftersom det handlar om en (c)odeprotected applikation, men det är väl ingen fara med licenser vad det än må vara när det skrivs över till en annan kärna och en assembler som är "one of it's kind".
God Jul till Er alla!
Koden får inte innehålla ens en halv bit GPL, eftersom det handlar om en (c)odeprotected applikation, men det är väl ingen fara med licenser vad det än må vara när det skrivs över till en annan kärna och en assembler som är "one of it's kind".
God Jul till Er alla!