Flyttalslib till 16F887 ?
Re: Flyttalslib till 16F887 ?
Jag tror på ändå på heltalsaritmetik. Enkelt att skala upp till valfri noggranhet och ingenting faller utanför om det blir för litet. Välj bara en konstant faktor som du multiplicerar alla reella tal med och du har full kontroll. Möjligen kan du hitta snabbare algoritmer som använder flyttal, men det finns väl inga parametrar in till din algoritm som uppdateras i realtid förutom vad klockan är, och den vet man ju hur den beter sig, så inga realtidsproblem?
Re: Flyttalslib till 16F887 ?
Det är ju ett sätt, men kan bli ganska hyfsat många bits. Det finns en god anledning att använda flyttal.
IEEE-32 med sina ynka 23 bits ger endast 6.92 siffrors noggrannhet
IEEE-64 med 52 bits ger 15.65 siffror.
Nuvarande lib med 31 bits ger 9.33 siffror.
Utökas det till 47 bits blir det 14.15 siffror.
Jag antar att gcc float är IEEE-32 och det blir blaj. Double är väl IEEE-64 och det blir beräkningar inom 1 minut från en professionell tabell. Frågan är vad 9 siffror kan åstadkomma. Med 14 siffror antar jag att det räcker. Vad anser Ni som är mycket kunnigare?
Sedan är det kanske en annan sak vad befintligt lib verkligen ger. Där är gjort en del förenklingar. Att det används samma för sin/cos gör knappast någon skada, men att använda arctan till arcsin och arccos blir en hel del vridande och vändande som säkert dribblar bort några bits.
Tillägg: Konstanterna som används är 12 siffror som mest. Så med 14 borde noggrannheten tas tillvara någorlunda. Eller är där någon felkälla jag är för okunnig att förstå som ställer till det mer än det tåler?
Jag vet att add/sub där exponenterna skiljer är mycket obra och förvärras kraftigt med kortare mantissa, men kan för lite för att bedöma vad det gör här. Enda sättet för mig är att testa...
IEEE-32 med sina ynka 23 bits ger endast 6.92 siffrors noggrannhet
IEEE-64 med 52 bits ger 15.65 siffror.
Nuvarande lib med 31 bits ger 9.33 siffror.
Utökas det till 47 bits blir det 14.15 siffror.
Jag antar att gcc float är IEEE-32 och det blir blaj. Double är väl IEEE-64 och det blir beräkningar inom 1 minut från en professionell tabell. Frågan är vad 9 siffror kan åstadkomma. Med 14 siffror antar jag att det räcker. Vad anser Ni som är mycket kunnigare?
Sedan är det kanske en annan sak vad befintligt lib verkligen ger. Där är gjort en del förenklingar. Att det används samma för sin/cos gör knappast någon skada, men att använda arctan till arcsin och arccos blir en hel del vridande och vändande som säkert dribblar bort några bits.
Tillägg: Konstanterna som används är 12 siffror som mest. Så med 14 borde noggrannheten tas tillvara någorlunda. Eller är där någon felkälla jag är för okunnig att förstå som ställer till det mer än det tåler?
Jag vet att add/sub där exponenterna skiljer är mycket obra och förvärras kraftigt med kortare mantissa, men kan för lite för att bedöma vad det gör här. Enda sättet för mig är att testa...
Re: Flyttalslib till 16F887 ?
Glad amatör, men ordningsföljden av beräkninarna i algorimen man använder, kan ha betydelse för den resulterande noggrannheten. Inte nödvändigtvis trivialt att få reda på den bästa ordningen, som kan bero på vilka numeriska värden som råkar ingå.
Re: Flyttalslib till 16F887 ?
Letade och hittade en del om detta. Får se vad jag kan få ihopa när allt blir klart. Kommer först att följa det jag testat i C så långt det går. Det fungerar utmärkt med antagligen 53 bits noggrannhet. Hoppas det blir bra även med 47 bits.
Har bestämt mig för att testa det alternativet. Dubbelt upp mot IEEE-32, Det tar upp 8 bytes totalt. Det förloras en byte på inledande etta och 7 oanvända ihop med teckenbit. Så måste det bli i ett opackat format, redo att bearbeta.
Har bestämt mig för att testa det alternativet. Dubbelt upp mot IEEE-32, Det tar upp 8 bytes totalt. Det förloras en byte på inledande etta och 7 oanvända ihop med teckenbit. Så måste det bli i ett opackat format, redo att bearbeta.
Re: Flyttalslib till 16F887 ?
Jag tycker det låter som att du har rätt bra koll på det. När man adderar/subtraherar flyttal sker först en skift av mantissan så att exponenterna blir samma. Man kan se det som att man förlorar precision, men det är ju precis så flyttal är designade: mantissan följer med exponenten upp och ner och ger den skenbara effekten att upplösningen ser ut att vara större än vad den i verkligheten är. Ofta går det bra. Ibland inte. Mera sällan är det någon som faktiskt kontrollerar om det blev rätt eller inte. Det räcker ju till Excel.
Och precis som rvl säger så spelar ordningen vid addition roll, så vill man ha determinism i sina beräkningar får man tänka ett varv till. Kanske börja med att sortera talen. Men det kostar exekveringstid typ Nlog(N), så...
64 bitar heltalsaritmetik (nästan 20 siffror) istället för flyttal alla dagar i veckan om precisionen räcker för applikationen tycker jag.
Och precis som rvl säger så spelar ordningen vid addition roll, så vill man ha determinism i sina beräkningar får man tänka ett varv till. Kanske börja med att sortera talen. Men det kostar exekveringstid typ Nlog(N), så...
64 bitar heltalsaritmetik (nästan 20 siffror) istället för flyttal alla dagar i veckan om precisionen räcker för applikationen tycker jag.
Re: Flyttalslib till 16F887 ?
Med ett visst bitantal är det ännu bättre att ha dessa bits som mantissa i ett flyttal. Den del av programmet som slukar tid är ungefär densamma.
Hursom, nu är så pass myckat av detta flyttalslib konverterat till 47bit att det är möjligt beräkna sinus. Det fanns trunkerade siffror kvar i boken. Upphovsmannen hade gett hänvisningar, så nu är dessa inkluderade.
Resultatet blev sådär. Tolfte siffran viker från vad gcc double ger. Boken utlovar 13.2 siffror. Det kanske räcker. Bra mycket bättre än IEEE32 med ynka 6.9 siffror.
sin(67deg)=
0.92050485345905 fplib 13,2utlovas, 12:e viker
0.92050485345244 gcc double
Återstår att se om jag pallar maxxa upp tan och arctan. arc-sin/cos/tan bygger på arctan. Boken lovar arctan 9.06 siffror, tan 8.2 . Måste åtgärdas. Kommer sannolikt att behöva lite hjälp med detta. Tänker då på algoritmen i pseudokod.
Hursom, nu är så pass myckat av detta flyttalslib konverterat till 47bit att det är möjligt beräkna sinus. Det fanns trunkerade siffror kvar i boken. Upphovsmannen hade gett hänvisningar, så nu är dessa inkluderade.
Resultatet blev sådär. Tolfte siffran viker från vad gcc double ger. Boken utlovar 13.2 siffror. Det kanske räcker. Bra mycket bättre än IEEE32 med ynka 6.9 siffror.
sin(67deg)=
0.92050485345905 fplib 13,2utlovas, 12:e viker
0.92050485345244 gcc double
Återstår att se om jag pallar maxxa upp tan och arctan. arc-sin/cos/tan bygger på arctan. Boken lovar arctan 9.06 siffror, tan 8.2 . Måste åtgärdas. Kommer sannolikt att behöva lite hjälp med detta. Tänker då på algoritmen i pseudokod.
Re: Flyttalslib till 16F887 ?
Blir det samma resultat med cos(23°)? ...eller göra sinusbedömningen med en vinkel <=45?
Re: Flyttalslib till 16F887 ?
Här tänker vi olika
Kul att det funkar. Oroande att det inte blir samma svar dock. Har du kollat hur stort felet blir över en större mängd vinklar?Marta skrev: ↑29 november 2024, 13:49:45 Hursom, nu är så pass myckat av detta flyttalslib konverterat till 47bit att det är möjligt beräkna sinus. Det fanns trunkerade siffror kvar i boken. Upphovsmannen hade gett hänvisningar, så nu är dessa inkluderade.
Resultatet blev sådär. Tolfte siffran viker från vad gcc double ger. Boken utlovar 13.2 siffror. Det kanske räcker. Bra mycket bättre än IEEE32 med ynka 6.9 siffror.
sin(67deg)=
0.92050485345905 fplib 13,2utlovas, 12:e viker
0.92050485345244 gcc double
Re: Flyttalslib till 16F887 ?
Med t.ex. 23deg så viker 13:de siffran
0.39073112848932 fplib
0.39073112848927 gcc double
Felet är nog vad som kan förväntas. Det blev några bits över från tabellerna som inte fick plats i 6 bytes. Skulle nog fått plats med 56 bits med skohorn. Även 64 om det lagts i bank2 så de variabler som är rena lagringsplatser kunnat läggas i bank3 och addresseras indirekt.
0.39073112848932 fplib
0.39073112848927 gcc double
Felet är nog vad som kan förväntas. Det blev några bits över från tabellerna som inte fick plats i 6 bytes. Skulle nog fått plats med 56 bits med skohorn. Även 64 om det lagts i bank2 så de variabler som är rena lagringsplatser kunnat läggas i bank3 och addresseras indirekt.
Senast redigerad av Marta 29 november 2024, 15:07:02, redigerad totalt 1 gång.
Re: Flyttalslib till 16F887 ?
Vill minnas det var optimerat för +-pi/4, så man får använda komplement för beräkningar utanför.
Re: Flyttalslib till 16F887 ?
Letade nu i boken efter tabeller som ger den noggrannhet som passar för 47 bits och hittade en som ger 13 siffror. Till min förvåning är där 25 siffror i talen. inte ens 64-bit kan ta emot ett så långt tal.
Hur går det här ihop? Det förefaller orimligt. Antar här är något bortom vad jag begriper. Någon som kan reda ut begreppen?
Hur går det här ihop? Det förefaller orimligt. Antar här är något bortom vad jag begriper. Någon som kan reda ut begreppen?
Re: Flyttalslib till 16F887 ?
Kod: Markera allt
* 00259 ; =================================================================
* 00260 ; TAN(x*PI/4) = x * P(x*x)/Q(x*x)
* 00261 ;
* 00262 ; Formula 4242, pg216
* 00263 ; TAN
* 00264 ; 0 90 90+ 180- 180 270- 270 360-
* 00265 ; 0,1,1,INF | -INF,-1,-1,-0 | 0,1,1,INF | INF,-1,-1,-0
* 00266 ;
* 00267 ; We can compute TAN 0 to 45 degrees directly
* 00268 ;
* 00269 ; IDENTITIES
* 00270 ; TAN(X) = TAN(X MOD 180)
* 00271 ; Y = X MOD 45
* 00272 ; QUAD 0 if(X >= 0 && < 45)
* 00273 ; TAN = TAN(Y);
* 00274 ; QUAD 1 if(X >= 45 && < 90)
* 00275 ; TAN = 1/TAN(45-Y);
* 00276 ; QUAD 2 if(X >= 90 && < 135)
* 00277 ; TAN = -1/TAN(Y);
* 00278 ; QUAD 3 if(X >= 135 && < 180)
* 00279 ; TAN = -TAN(45-Y));
* 00280 ;
* 00281 ; NOTE SAME TAN_SCALE BASIS IS USED IN COMPUTATION, KINDA NICE!
* 00282 ;
* 00283 ;===============================================================
M_TAN_SCALE .eq M_4_PI * 0000005D 00284 M_TAN_SCALE equ M_4_PI ; 1.2732395447e+00 (temp real)
* 00285 ;
M_TANP1 *0488 00286 M_TANP1 ; -1.2528888728e+01 (temp real)
rtl a,#0
rtl a,#0
rtl a,#0x07 ; (0) LSB *0488 3407 00287 retlw 0x07 ; (0) LSB
rtl a,#0x54 ; (1) *0489 3454 00288 retlw 0x54 ; (1)
rtl a,#0x76 ; (2) *048A 3476 00289 retlw 0x76 ; (2)
rtl a,#0xc8 ; (3) MSB *048B 34C8 00290 retlw 0xc8 ; (3) MSB
rtl a,#0x82 ; (4) EXP *048C 3482 00291 retlw 0x82 ; (4) EXP
rtl a,#0x80 ; (5) SIGN *048D 3480 00292 retlw 0x80 ; (5) SIGN
* 00293
M_TANP2 *048E 00294 M_TANP2 ; 2.1184936966e+02 (temp real)
rtl a,#0
rtl a,#0
rtl a,#0x4a ; (0) LSB *048E 344A 00295 retlw 0x4a ; (0) LSB
rtl a,#0x70 ; (1) *048F 3470 00296 retlw 0x70 ; (1)
rtl a,#0xd9 ; (2) *0490 34D9 00297 retlw 0xd9 ; (2)
rtl a,#0xd3 ; (3) MSB *0491 34D3 00298 retlw 0xd3 ; (3) MSB
rtl a,#0x86 ; (4) EXP *0492 3486 00299 retlw 0x86 ; (4) EXP
rtl a,#0x00 ; (5) SIGN *0493 3400 00300 retlw 0x00 ; (5) SIGN
* 00301
M_TANQ1 *0494 00302 M_TANQ1 ; 1.0000000000e+00 (temp real)
rtl a,#0
rtl a,#0
rtl a,#0x00 ; (0) LSB *0494 3400 00303 retlw 0x00 ; (0) LSB
rtl a,#0x00 ; (1) *0495 3400 00304 retlw 0x00 ; (1)
rtl a,#0x00 ; (2) *0496 3400 00305 retlw 0x00 ; (2)
rtl a,#0x80 ; (3) MSB *0497 3480 00306 retlw 0x80 ; (3) MSB
rtl a,#0x7f ; (4) EXP *0498 347F 00307 retlw 0x7f ; (4) EXP
rtl a,#0x00 ; (5) SIGN *0499 3400 00308 retlw 0x00 ; (5) SIGN
* 00309
M_TANQ2 *049A 00310 M_TANQ2 ; -7.1414530935e+01 (temp real)
rtl a,#0
rtl a,#0
rtl a,#0x66 ; (0) LSB *049A 3466 00311 retlw 0x66 ; (0) LSB
rtl a,#0x3d ; (1) *049B 343D 00312 retlw 0x3d ; (1)
rtl a,#0xd4 ; (2) *049C 34D4 00313 retlw 0xd4 ; (2)
rtl a,#0x8e ; (3) MSB *049D 348E 00314 retlw 0x8e ; (3) MSB
rtl a,#0x85 ; (4) EXP *049E 3485 00315 retlw 0x85 ; (4) EXP
rtl a,#0x80 ; (5) SIGN *049F 3480 00316 retlw 0x80 ; (5) SIGN
* 00317
M_TANQ3 *04A0 00318 M_TANQ3 ; 2.6973501312e+02 (temp real)
rtl a,#0
rtl a,#0
rtl a,#0xe9 ; (0) LSB *04A0 34E9 00319 retlw 0xe9 ; (0) LSB
rtl a,#0x14 ; (1) *04A1 3414 00320 retlw 0x14 ; (1)
rtl a,#0xde ; (2) *04A2 34DE 00321 retlw 0xde ; (2)
rtl a,#0x86 ; (3) MSB *04A3 3486 00322 retlw 0x86 ; (3) MSB
rtl a,#0x87 ; (4) EXP *04A4 3487 00323 retlw 0x87 ; (4) EXP
rtl a,#0x00 ; (5) SIGN *04A5 3400 00324 retlw 0x00 ; (5) SIGN
* 00325
_FP_TAN *04A6 00326 _FP_TAN: ; FPac = TAN(FPac)
* 00327 TRarg_TABLE_LD M_TAN_SCALE ; TRarg = M_TAN_SCALE
* M TABLE_SET_SOURCE M_TAN_SCALE
* M LOAD16I table_ptr,M_TAN_SCALE
* M IN_LOADI table_ptr,M_TAN_SCALE,2
* 0000 M local index = 0
* M WHILE index < 2
* M LOAD8I table_ptr+index, ((M_TAN_SCALE) >> (index*8)) & 0xff
lod a,#<M_TAN_SCALE/2 *04A6 305D M movlw LOW(((M_TAN_SCALE) >> (index*8)) & 0xff)
lod table.ptr,a *04A7 00A6 M movwf table_ptr+index
* 00000001 M index = index + 1
* M LOAD8I table_ptr+index, ((M_TAN_SCALE) >> (index*8)) & 0xff
lod a,#>M_TAN_SCALE/2 *04A8 3000 M movlw LOW(((M_TAN_SCALE) >> (index*8)) & 0xff)
lod table.ptr+1,a *04A9 00A7 M movwf table_ptr+index
* 00000002 M index = index + 1
* M ENDW
jsr _TRarg_TABLE_LD *04AA 203F M CALL _TRarg_TABLE_LD
* 00328
* 00329 FP_MUL
jsr _FP_MUL *04AB 22CB M CALL _FP_MUL
* 00330 FP_QUAD
jsr _FP_QUAD *04AC 2421 M CALL _FP_QUAD
* 00331 JMP_BCLR FPquad,0,_FP_tan_1
* M SKIP_BSET FPquad,0
sbs FPquad,0 *04AD 1C50 M btfss FPquad,0
* M JMP _FP_tan_1
jmp _FP_tan_1 *04AE 2CB2 M goto _FP_tan_1
* 00332 FParg_ONE ; FParg = 1.0
jsr _FParg_ONE *04AF 21FA M CALL _FParg_ONE
* 00333 FPac_SWAP
jsr _FPac_SWAP *04B0 21EB M CALL _FPac_SWAP
* 00334 FP_SUB ; xp = 1.0 - xp
jsr _FP_SUB *04B1 228D M CALL _FP_SUB
_FP_tan_1 *04B2 00335 _FP_tan_1
* 00336 TABLE_SET_TRarg ; TRarg = Default Table load
jsr _TABLE_SET_TRarg *04B2 202E M CALL _TABLE_SET_TRarg
* 00337 TRac_STORE FParg1 ; FParg1 = xp
lod a,#FParg1 *04B3 3044 M movlw FParg1
jsr _TRac_STORE *04B4 21DF M CALL _TRac_STORE
* 00338 FPac_CLR ; p = 0
jsr _FPac_CLR *04B5 21F4 M CALL _FPac_CLR
* 00339 TABLE_SET_SOURCE M_TANP1
* M LOAD16I table_ptr,M_TANP1
* M IN_LOADI table_ptr,M_TANP1,2
* 0000 M local index = 0
* M WHILE index < 2
* M LOAD8I table_ptr+index, ((M_TANP1) >> (index*8)) & 0xff
lod a,#<M_TANP1/2 *04B6 3088 M movlw LOW(((M_TANP1) >> (index*8)) & 0xff)
lod table.ptr,a *04B7 00A6 M movwf table_ptr+index
* 00000001 M index = index + 1
* M LOAD8I table_ptr+index, ((M_TANP1) >> (index*8)) & 0xff
lod a,#>M_TANP1/2 *04B8 3004 M movlw LOW(((M_TANP1) >> (index*8)) & 0xff)
lod table.ptr+1,a *04B9 00A7 M movwf table_ptr+index
* 00000002 M index = index + 1
* M ENDW
* 00340 POLY_FParg1 ; p += Constant, p *= xp
jsr _POLY_FParg1 *04BA 23FB M CALL _POLY_FParg1
* 00341 FP_MUL ; p *= xp
jsr _FP_MUL *04BB 22CB M CALL _FP_MUL
* 00342 POLY_FParg1 ; p += Constant, p *= xp
jsr _POLY_FParg1 *04BC 23FB M CALL _POLY_FParg1
* 00343 TRac_STORE FParg2 ; p
lod a,#FParg2 *04BD 304A M movlw FParg2
jsr _TRac_STORE *04BE 21DF M CALL _TRac_STORE
* 00344
* 00345 TABLE_SET_SOURCE M_TANQ1
* M LOAD16I table_ptr,M_TANQ1
* M IN_LOADI table_ptr,M_TANQ1,2
* 0000 M local index = 0
* M WHILE index < 2
* M LOAD8I table_ptr+index, ((M_TANQ1) >> (index*8)) & 0xff
lod a,#<M_TANQ1/2 *04BF 3094 M movlw LOW(((M_TANQ1) >> (index*8)) & 0xff)
lod table.ptr,a *04C0 00A6 M movwf table_ptr+index
* 00000001 M index = index + 1
* M LOAD8I table_ptr+index, ((M_TANQ1) >> (index*8)) & 0xff
lod a,#>M_TANQ1/2 *04C1 3004 M movlw LOW(((M_TANQ1) >> (index*8)) & 0xff)
lod table.ptr+1,a *04C2 00A7 M movwf table_ptr+index
* 00000002 M index = index + 1
* M ENDW
* 00346 FPac_CLR ; p = 0
jsr _FPac_CLR *04C3 21F4 M CALL _FPac_CLR
* 00347 POLY_FParg1 ; q += Constant, q *= xp
jsr _POLY_FParg1 *04C4 23FB M CALL _POLY_FParg1
* 00348 FP_MUL ; q *= xp
jsr _FP_MUL *04C5 22CB M CALL _FP_MUL
* 00349 POLY_FParg1 ; q += Constant, q *= xp
jsr _POLY_FParg1 *04C6 23FB M CALL _POLY_FParg1
* 00350 FP_MUL ; q *= xp
jsr _FP_MUL *04C7 22CB M CALL _FP_MUL
* 00351
* 00352 TABLE_LD ; FParg = Constant
jsr _TABLE_LD *04C8 2013 M CALL _TABLE_LD
* 00353 FP_ADD ; q += Constant
jsr _FP_ADD *04C9 2292 M CALL _FP_ADD
* 00354 TRarg_LOAD FParg2 ; FPac = q, FParg = p
lod a,#FParg2 *04CA 304A M movlw FParg2
jsr _TRarg_LOAD *04CB 21E3 M CALL _TRarg_LOAD
* 00355
* 00356 AND8I FPquad,3
lod a,#3 *04CC 3003 M movlw 3
and FPquad,a *04CD 05D0 M andwf FPquad,f
* 00357
* 00358 CMP8I FPquad,1 ; FPquad == 1
lod a,#1 *04CE 3001 M movlw 1
sur a,FPquad *04CF 0250 M subwf FPquad,w
* 00359 JMP_Z _fp_tan_2 ; q / p
* M SKIP_NZ
* M SKIP_BCLR STATUS,Z
sfc z *04D0 1903 M btfsc STATUS,Z
* M JMP _fp_tan_2
jmp _fp_tan_2 *04D1 2CD7 M goto _fp_tan_2
* 00360 CMP8I FPquad,2 ; FPquad == 2 ?
lod a,#2 *04D2 3002 M movlw 2
sur a,FPquad *04D3 0250 M subwf FPquad,w
* 00361 JMP_Z _fp_tan_2 ; q / p
* M SKIP_NZ
* M SKIP_BCLR STATUS,Z
sfc z *04D4 1903 M btfsc STATUS,Z
* M JMP _fp_tan_2
jmp _fp_tan_2 *04D5 2CD7 M goto _fp_tan_2
* 00362 FPac_SWAP ; p / q
jsr _FPac_SWAP *04D6 21EB M CALL _FPac_SWAP
_fp_tan_2 *04D7 00363 _fp_tan_2
* 00364 FP_DIV
jsr _FP_DIV *04D7 22FD M CALL _FP_DIV
* 00365 JMP_BCLR FPquad,1,_fp_tan_3 ; FP_quad & 4
* M SKIP_BSET FPquad,1
sbs FPquad,1 *04D8 1CD0 M btfss FPquad,1
* M JMP _fp_tan_3
jmp _fp_tan_3 *04D9 2CDC M goto _fp_tan_3
* 00366 XOR8I FPac_SIGN,0x80 ; xp = -xp
lod a,#0x80 *04DA 3080 M movlw 0x80
eor FPac_SIGN,a *04DB 06AF M xorwf FPac_SIGN,f
_fp_tan_3 *04DC 00367 _fp_tan_3
* 00368 XOR8 FPac_SIGN,FPflag ; xp ^= FPflag
lod a,FPflag *04DC 0851 M movfw FPflag
eor FPac_SIGN,a *04DD 06AF M xorwf FPac_SIGN,f
* 00369 ENDSUB
rts *04DE 0008 M return
.bc * 00370
Re: Flyttalslib till 16F887 ?
Nu funkar atan någorlunda. Det var lite stökigt att få till, men jag antar det är så bra det kan bli med 47 bits. Tabellen innehåller 22 siffror och det får inte plats, blir trunkerat till drygt 14. Antar att med de förutsättningarna är 11 siffror vad som kan förväntas. Vad säger Ni som kan? Jag är nybörjare på detta.
atan(2.0)
1.10714871779409 gcc
1.1071487177333 fplib
Tabellen hade ett fel, en sifferposition är blank. Samma i alla de kopior jag fått tag i... Jag löste det empiriskt. Kom fram till att det är 7 som saknas. Det är OCR, så i teorin kan det finnas blaj i de konstanter som används.
atan(2.0)
1.10714871779409 gcc
1.1071487177333 fplib
Tabellen hade ett fel, en sifferposition är blank. Samma i alla de kopior jag fått tag i... Jag löste det empiriskt. Kom fram till att det är 7 som saknas. Det är OCR, så i teorin kan det finnas blaj i de konstanter som används.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Flyttalslib till 16F887 ?
1.10714871779409 gcc
1.1071487177940 fplib
Det ingår en konstant till som jag missat räkna om med rätt noggrannhet, nu är den omräknad.
1.1071487177940 fplib
Det ingår en konstant till som jag missat räkna om med rätt noggrannhet, nu är den omräknad.