asin/acos, dålig precicion då x --> 1
Postat: 29 januari 2026, 17:03:31
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.
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.