Sida 1 av 1
flyttalskonvertering
Postat: 22 december 2008, 23:12:09
av Marta
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.
Postat: 23 december 2008, 01:34:25
av speakman
Detta är väl iofs mest kodfragment, men den förklarar ju en del:
http://beej.us/guide/bgnet/output/html/ ... ialization
Postat: 23 december 2008, 23:16:21
av Marta
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?
Postat: 24 december 2008, 00:21:23
av Andax
Googlade på "floating point print" och hittade en del intressant, t.ex.
pdf-fil (annan länk till samma
pdf)
I vilken miljö ska det användas? Windows, PIC, AVR etc... Det finns en del färdigt...
Postat: 24 december 2008, 00:44:09
av Marta
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.
Postat: 24 december 2008, 12:04:27
av SvenW
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!
Postat: 24 december 2008, 13:12:22
av Marta
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!