Avatar billede hono Nybegynder
19. november 2001 - 17:23 Der er 13 kommentarer og
2 løsninger

Sinus, cosinus og tangens

Jeg har lavet en lille funktion med java script:

<html>

<script>
function regn() {

var x;

x = Math.cos(document.formular.a.value);

skriv.innerHTML = x;

if (skriv.innerHTML == \"NaN\")
skriv.innerHTML = \"Fejl\";
}
</script>

<body>

<form name=\"formular\">

<input type=\"text\" name=\"a\">
<input type=\"button\" value=\"regn\" onclick=\"regn()\">
</form>

<span id=\"skriv\"></span>
</body>
</html>

Det bare lige hurtigt skrabet sammen og virker vist kun i IE 5.5+. Mit problem er at math.cos ikke virker. Det returnerer gansle vist en værdi, men den er ukorrekt. F.eks. returneres -0.4480736161291701 når man skriver 90, hvor det jo skulle være 0. Det samme sker ved math.sin og math.tan. Hvad er årsagen?

Hono
Avatar billede lyhr007 Nybegynder
19. november 2001 - 17:25 #1
Uden at kunne huske min gym matematik alt for godt. Er det ikke noget med om det er radian tal eller normale tal?!
Avatar billede jakoba Nybegynder
19. november 2001 - 17:30 #2
den parameter du giver til Math.sin og Math.cos er ikke i grader men i radianer. Dvs asstanden langs med cirkelkanten målt i radiusser.

siden en cirkels omkreds er 2PI*r vil dt sige Math.sin(2*Math.PI) == 0

for at måle sin eller cos på fx 90 grader må du lave kaldet om til:
    Math.cos( (90/180) *Math.PI );  // sku gerne give 0

mvh JakobA
Avatar billede jakoba Nybegynder
19. november 2001 - 17:31 #3
Ups.  asstanden -> afstanden
Avatar billede teknik Juniormester
19. november 2001 - 17:31 #4
-0,4880 er akkurat cos(90) når der regnes i radianer, så den er god nok som lyhr siger.

Du har altså behov for på ene eller anden måde at fortælle funktionen, at datainput er i grader.
Avatar billede hono Nybegynder
19. november 2001 - 17:34 #5
Desværre, det giver: 6.123031769111886e-17

Hono
Avatar billede hono Nybegynder
19. november 2001 - 17:41 #6
Er der så ikke nogle der kan fortælle mig hvordan jeg sætter det til at være grader?

Hono
Avatar billede jakoba Nybegynder
19. november 2001 - 17:43 #7
sådan:
    Math.cos( (90/180) *Math.PI );  // sku gerne give 0

dele med 180 ( PI i grader ) og så gange med PI.
Avatar billede teknik Juniormester
19. november 2001 - 17:43 #8
Som Jacoba siger:
Dog er udregningen ikke helt 100%, da man ikke får nul, men
0,000000000000000006  som facit på cos(90)
<html>

<script>
function regn() {

var x;

x = Math.cos(document.formular.a.value*Math.PI/180.0);

skriv.innerHTML = x;

if (skriv.innerHTML == \"NaN\")
skriv.innerHTML = \"Fejl\";
}
</script>

<body>

<form name=\"formular\">

<input type=\"text\" name=\"a\">
<input type=\"button\" value=\"regn\" onclick=\"regn()\">
</form>

<span id=\"skriv\"></span>
</body>
</html>
Avatar billede hono Nybegynder
19. november 2001 - 17:47 #9
Jo, det virker fint alle værdier undtagen 90. Der giver det hos mig, som jeg skrev ovenfor: 6.123031769111886e-17 mangler der noget i formlen eller hvad?

Hono
Avatar billede teknik Juniormester
19. november 2001 - 17:51 #10
cos(0) og cos(180) passer dog 100% og returnerer hhv. 1 og -1

Årsgen til \"fejlen\" skal sikkert findes i en \"upræcis\" definition af pi (i.. javascript?),
formodentlig noget \"sjusk\" med kun 10-20 betydende cifre
Avatar billede hono Nybegynder
19. november 2001 - 17:53 #11
Takker for hjælpen.

Hono
Avatar billede jakoba Nybegynder
19. november 2001 - 17:54 #12
6.12 er ret så langt fra de 6.14 som PI starter med
Fejlen bliver nok mindre hvis du gør det på tekniks måde, dvs først ganger med PI og derefter deler med 180:
    document.formular.a.value*Math.PI/180.0
Avatar billede hono Nybegynder
19. november 2001 - 17:55 #13
OK, men ellers kan vel definere min egen pi-værdi med flere betydende cifre.

Hono
Avatar billede teknik Juniormester
19. november 2001 - 17:55 #14
Det giver samme resultat her, og det er desværre ikke præcist \"nul\", kun utroligt tæt på.
Hvis du vil have et \"pænere svar, så må du nok tilføje en \"if\" ting,
hvor værdier mindre end 1.0e-10 returneres som værende 0

Avatar billede hono Nybegynder
19. november 2001 - 17:57 #15
Ja sådan kan jeg selvfølgelig gøre. Tusind tak

Hono
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