11. oktober 2002 - 18:26Der 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.....
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?
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!
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... :)
function MySin(Rad: Extended): Extended; begin if Rad = Pi then Result := 0 else Result := Sin(Rad); end;
Synes godt om
Ny brugerNybegynder
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.