flyttalskonvertering

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7399
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

flyttalskonvertering

Inlägg 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.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Detta är väl iofs mest kodfragment, men den förklarar ju en del:
http://beej.us/guide/bgnet/output/html/ ... ialization
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7399
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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?
Användarvisningsbild
Andax
Inlägg: 4379
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Inlägg 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...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7399
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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.
SvenW
Inlägg: 1155
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Inlägg 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!
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7399
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Inlägg 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!
Skriv svar