Avatar billede lincoln Nybegynder
11. oktober 2002 - 18:26 Der er 4 kommentarer og
1 løsning

Sinus til PI giver -5,42101086242752E-20

Hvorfor siger delphi at sin(Pi) er -5,42101086242752E-20 og ikke 0?

Edit1.text := FloatToStr(Sin(Pi));

Er det fordi typen extended ikke kan konverteres til en string med FloatToStr()? Hvilken skal jeg i så fald bruge?
Jeg kan ikke finde nogen ExtendedToString.....
Avatar billede jespernaur Nybegynder
11. oktober 2002 - 18:53 #1
Uanset hvor nøjagtigt man kan regne, vil man aldrig kunne få den præcise værdi af Pi. Derfor vil sin(Pi) heller aldrig kunne blive præcist, igen lige meget hvor nøjagtigt man regner. Men - det resultat du får er altså ikke ret stort (-0. <19 nuller> 542...). Er det ikke godt nok?
Avatar billede lincoln Nybegynder
11. oktober 2002 - 19:36 #2
Så må jeg selv lave mig en funktion, så den tester om input til Sin() er pi eller 2pi eller 3pi eller...

Jeg troede, det var et problem med variablen... Men tak for det åbenlyse svar.
Avatar billede jespernaur Nybegynder
11. oktober 2002 - 20:03 #3
Hvis jeg var dig ville jeg benytte en lidt anden metode: Beslut med dig selv hvor lille den absolutte værdi af sin skal være, for at du vil opfatte det som 0. Lav din funktion så den tester på dette, istedet for om brugeren kommer med en værdi, der er et multiplum af Pi.

Forklaring: Da Pi (som vel er en konstant stillet til rådighed af Delphi) i sig selv ikke er nøjagtig, må det give et bedre resultat at undertrykke meget små resultater af sin end at definere at bestemte værdier af sin's argument skal resultere i 0. Med din ide kan man faktisk i værste fald risikere, at din funktion (sin-approksimation) ikke er monoton i omegnen af Pi!
Avatar billede fracklen Nybegynder
21. oktober 2002 - 14:47 #4
Jesper - jeg er enig med dig i at din metode vil være den bedste, men den vil for så vidt heller ik være monoton...det er små detaljer, men matematisk set... :)
Avatar billede hermandsen Juniormester
11. november 2002 - 19:11 #5
Kan du ikke bare lave din egen sin-funktion?

function MySin(Rad: Extended): Extended;
begin
  if Rad = Pi then
    Result := 0
  else
    Result := Sin(Rad);
end;
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
Kurser inden for grundlæggende programmering

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