Avatar billede mummikiks Nybegynder
29. juli 2006 - 13:35 Der er 11 kommentarer og
1 løsning

Problemer med sinus og cos

Hej experter

Jeg har lidt problemer med funktionerne Math.cos og math.sin i javascript. De returnere ikke helt det samme som min lommeregner, fx.
Math.sin(Math.PI) = 1.2246063538223773e-16
sin(PI) på lommeregnere giver selvfølgelig 0

Hvorfor stemmer disse tal ikke overens?

Videre giver Math.cos((Math.PI)/2) = 6.123031769111886e-17

cos(PI/2) giver jo på en lommeregner 0;

Håber der er nogle der kan hjælpe mig med at finde problemet.
Avatar billede rangerbs Nybegynder
29. juli 2006 - 13:43 #1
grunden er måske at lommeregneren ikke kan regne ligeså præcist som computeren.. da 6.123031769111886e-17 jo er ekstremt tæt på nul..
Avatar billede mclemens Nybegynder
29. juli 2006 - 13:49 #2
Min lommeregner siger (ti-83):
sin(pi) : 0.0548036651
cos(pi/2) : 0.9996242169
... tror rangerbs har ret -> ny lomeregner :o)
Avatar billede Slettet bruger
29. juli 2006 - 13:57 #3
Æh, sin(pi) er 0 og cos(pi/2) er 0 (bare se på enhedscirklen)! Har i regnet i radiantal? Ellers giver jeres lommeregnere ikke rigtigt svar!

Jeg tror problemet er at computeren bruger en tilnærmet værdi af PI, og derfor får man også kun en tilnærmet værdi af 0 ;)
Avatar billede erikjacobsen Ekspert
29. juli 2006 - 14:08 #4
Du skal bare gøre som lommeregneren: lade være med at skrive flere cifre ud, end man kan regne med. Du kan fx. 
    alert(Math.sin(Math.PI).toFixed(14));
Al regning med kommatal i maskiner af alskens slags sker tilnærmet. Man skal derfor have begreb om hvilken præcision af resultatet man kan regne med (det var den korte udgave ...)
Avatar billede mclemens Nybegynder
29. juli 2006 - 14:10 #5
[ Har i regnet i radiantal? Ellers giver jeres lommeregnere ikke rigtigt svar! ]
... arg, dumme degree indstilling du har ret 0 og 0...

[ Jeg tror problemet er at computeren bruger en tilnærmet værdi af PI, og derfor får man også kun en tilnærmet værdi af 0 ;) ] den bruger: alert(Math.PI); -> 3.141592653589793 ... men du kan jo udvide pi angivelsen til noget der er nærmere ... -> http://www.angio.net/pi/piquery#find der er links til pi med en del cifre...

- tror også din lommeregner bruger en tilnærmet værdi af pi ...
Avatar billede mclemens Nybegynder
29. juli 2006 - 14:11 #6
... Genialt Erik :o)
Avatar billede mummikiks Nybegynder
29. juli 2006 - 14:31 #7
Er der nogen med en bestmet indtilling der kan få Math.sin(Math.PI) = 1.2246063538223773e-16

til at give 0 i stedet?
Avatar billede Slettet bruger
29. juli 2006 - 15:08 #8
mclemens> Ja, lommeregneren bruger selvfølgelig også en tilnærmet værdi, men i mummikiks tilfælde afrunder den som erikjacobsen foreslår!
Avatar billede mclemens Nybegynder
29. juli 2006 - 16:43 #9
Tror ikke det kan gøres uden at begrænse det som Erik viste ...
- jeg har prøvet at definere tpi=(pi med en million cifre); og så lave opkald til sin og cos via den nye variabel ... det var samme resultat... Så som jjust siger laver lommeregneren en tilnærmet værdi - men også afrundet værdi ... js scriptet manglede bare en begrænsning/afrunding som Erik viste :o)
Avatar billede mummikiks Nybegynder
29. juli 2006 - 16:50 #10
Kanon drenge.. Erik du får pointene.. Smid et svar
Avatar billede erikjacobsen Ekspert
29. juli 2006 - 17:42 #11
Jeg samler slet ikke på point, tak.
Avatar billede mummikiks Nybegynder
29. juli 2006 - 18:02 #12
oki..jeg takker ihvertfald for svaret.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester