Sinüs Kosinüs Hesaplamada Hata

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kafkasyali
Üye
Mesajlar: 75
Kayıt: 04 Nis 2008 01:03

Sinüs Kosinüs Hesaplamada Hata

Mesaj gönderen kafkasyali »

Merhaba arkadaşlar.

Polar koordinat sisteminde yarı çapını ve açısını bildiğim bir noktanın orijine uzaklığını x,y olarak bulmak istiyorum. Programdaki amaç kaç adet nokta olursa olsun bunların x ve y cinsinden uzaklıklarının string gride yazılması. Mesela kullanıcı yarı çap 20, nokta adedi 10 yazdı. Program 360'ı 10'a bölerek 36 dereceyi buluyor ve ilk olarak 36 derecenin, sonra da 36'nın üzerine 36 ekleyerek 360'a kadar hesaplamayı yapıyor. Buraya kadar tamam. Sorun yok.

Taa ki açı 180 ya da 360 (ya da tekrar 0)'a gelene kadar. 20mm yarı çapında bir değer için;

180 derece 1,08..... mm
360 derece 2,16......mm

sapma yapıyor. Bu da hassas ölçümler için büyük sıkıntı bilirsiniz. Halbuki sinüs 0, 180 ve 360 sıfıra eşit. Kullandığım kod bloğu aşagıda. Nerede yanlış yapıyorum?

Kod: Tümünü seç

derece := ilkderece; // ilk derece değişkeni 360'ın nokta sayısına bölümünden çıkan açı.
for sinusdongu := 1 to StrToInt(Edit1.Text) do
  begin
    StringGrid1.Cells[2, sinusdongu]:= FloatToStr(StrToFloat(Edit3.Text)*Sin(pi*(derece)/180)); //degtorad ile aynı.
    derece := ilkderece + derece;
  end;
visualbasic.stupid:=true;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Sinüs Kosinüs Hesaplamada Hata

Mesaj gönderen sabanakman »

Aslında sayı sıfır çıkıyor ama bilgisayar ortamında tutulan ikili (binary) sayı sistemindeki dönüşümden kaynaklanan değer kayıpları yüzünden çok çok çok küçük boyutta sapmalar olabilmektedir. FloatToStr ise bunu örnek olarak "-7.12234234234324E-17" şeklinde gösterebilir. Bu değer aslında sıfır olarak ele alınabilir. Zira -7.12 sayısını 10 üzeri -17 ile çarpmak demektir ki o da "-0.0000000000000000712" gibi bir sayı demektir. Bunu da sıfır olarak ele almak gerekir. Bunun sebebi başta da belirttiğim gibi ikili sayı sistemi üzerinden çalışan bilgisayarın, bu aritmetik üzerinden oluşan kırpma ve yuvarlama yapmasından kaynaklanmaktadır.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
kafkasyali
Üye
Mesajlar: 75
Kayıt: 04 Nis 2008 01:03

Re: Sinüs Kosinüs Hesaplamada Hata

Mesaj gönderen kafkasyali »

@sabanakman

Açıklayıcı güzel yorum için teşekkür ederim. Bir RoundTo'luk işi varmış. Sayenizde hallettim. Sağ olun...
visualbasic.stupid:=true;
Cevapla