asin/acos, dålig precicion då x --> 1

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7686
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

asin/acos, dålig precicion då x --> 1

Inlägg av Marta »

Har rensat upp ett fplib för PICoch det fungerar hyfsat i de flesta fall, men asin/acos använder atan för att spara plats.

Antog att det var sqrt(1-x*x) som var orsaken. Provade att istället använda sqrt((1-x)(1+x)), men lika uselt resultat.

number 0.99999999999999978
result 1.5707962425011994
correct 1.5707963057214724
error -6.3220273016639794e-08 errcode: 00

Med tal som inte är på infinitesimalt avstånd från ett är felet kring -15 och -16. Finns det något enkelt sätt att komma ifrån felet?


För atan2 prövade jag att vända divisionen och sedan göra pi/2-result. Blev inget resultat på "svåra" tal som driver upp ingångsvärdet till atan.
Antar enkel division är ett primitivt sätt att göra atan2.
hawkan
Inlägg: 3819
Blev medlem: 14 augusti 2011, 10:27:40

Re: asin/acos, dålig precicion då x --> 1

Inlägg av hawkan »

Möjlig precision i flyttalet? 32-bitars? 8-9 siffror.
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7686
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: asin/acos, dålig precicion då x --> 1

Inlägg av Marta »

56 bits mantissa.
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 35568
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: asin/acos, dålig precicion då x --> 1

Inlägg av HUGGBÄVERN »

Kan du använda approximativa metoder, typ serieutveckling??
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7686
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: asin/acos, dålig precicion då x --> 1

Inlägg av Marta »

Finns det något annat för trancendentala funktioner?
Det är Chebychew polynoms som används här.

Min gamla träskalle har svårt att hänga med ibland. Jag fick för mig invärdet låg nära ett, men det är ju infinitesimalt och då ger atan egendomliga svar när de kommer så nära noll. Det blir utsläckning i polynomet.

Tangens är något speciellt och blir blaj vid vinklar nära +/- pi/2 så det kan helt enkelt bara bli såhär. Det behövs ett till polynom för att asin/acos skall fungera i det området. Tveksamt om det är värt utrymmet för kod och tabell. Då är där annat av större värde att använda den platsen till.
guckrum
Inlägg: 1995
Blev medlem: 19 juni 2012, 09:04:27
Ort: Lund

Re: asin/acos, dålig precicion då x --> 1

Inlägg av guckrum »

En approximation är ju en approximation, och för något invärde är den sämst:-) Som du själv var inne på så kanske du kan spela med att byta plats på axlarna nära ändvärdena, om det är just där det blir problematiskt?
Användarvisningsbild
HUGGBÄVERN
Tidigare soundbrigade
Inlägg: 35568
Blev medlem: 23 augusti 2006, 22:44:11
Ort: Lilla Paris
Kontakt:

Re: asin/acos, dålig precicion då x --> 1

Inlägg av HUGGBÄVERN »

Min tanke kom från gamla universitetsstudier i numeriska metoder där man hade krågliga ekvationer är befann sig när singulariteter jobbade med polynom eller andra sätt att bryta ner funktioner och få fram vettiga värden.
SvenW
Inlägg: 1158
Blev medlem: 24 april 2007, 16:23:10
Ort: Göteborg

Re: asin/acos, dålig precicion då x --> 1

Inlägg av SvenW »

Man kan gör en asymtotisk utveckling.
Googla t.ex "asymptotic expansion arctan around pi/2"
Skriv svar