Sin(x) sorunu (V.B. 6.0)

mehmetasik008
20-03-2008, 11:36   |  #1  
OP Yıllanmış Üye
Teşekkür Sayısı: 0
100 mesaj
Kayıt Tarihi:Kayıt: Eyl 2006

SIN(X) fonksiyonun kodunu(Seri açılımı formulüyle)
yazdım.(Faktörüyel de orada kullanıldı).Ama program da overflow
oluyor.Bunun nedenini bulamıyorum.Yardımlarınızı bekliyorum..
(Oysaki sin(x) periyodik fonksiyon olduğundan değerleri -1 ile +1  arasında olması gerekir..)(İsteyenler seri açılım formüllerine bu adresten bakabilirler.."http://en.wikipedia.org/wiki/Trigonometric_function")

Option Explicit
Dim x As Double

Public Function Fak(l)
Dim s, k As Double
s = 1
For k = 1 To x
  s = s * k
Next
Fak = s
End Function


Private Sub Command1_Click()
Dim n, i, Deger As Double
x = Val(Text1.Text)
n = Val(Text2.Text)
For i = 0 To n
   Deger = ((-1) ^ n) * (x ^ (2 * i + 1)) / Fak(2 * i + 1)
Next i
Label4.Caption = Format(Deger, "Fixed")

End Sub

Private Sub Command2_Click()
End
End Sub


KuaforPlus
21-03-2008, 08:39   |  #2  
KuaforPlus avatarı
Yıllanmış Üye
Teşekkür Sayısı: 1
223 mesaj
Kayıt Tarihi:Kayıt: Nis 2007

Görebildiğim Hataları Yazıyorum. Belki Çözümünde Bir Parça Katkısı Olabilir.
Öncelikle
Dim x As Double  ifadesiyle,  x değerini double olarak deglare ettiniz.

oysa textboxlardan bilgi çekerken
x = Val(Text1.Text)
n = Val(Text2.Text)

ifadesinde textboxlardan alınan değeri value ye çevirip, double olan bir değer olan x e atadınız.

x = cdbl(Text1.Text)
n = cdbl(Text2.Text)
ifadenin doğrusu budur.   text den dönen değer stringdir ama biz x ve n ye atarken double ye çevirdik. yani deglare ile tam uyumlu. bu tip bir hatayı ince hesaplarda yapmanız kodların sağlıklı çalıştığını her ne kadar gösterse de yanılım payları yaratmaktadır.


Burada ki tanımlamanız da ise
Dim n, i, Deger As Double

n ve i değerleri value kaldı çünki "deger as double" gibi tanımlamadınız.


---------------
overflow taşma hatasıdır. demek istediğim "dim i as byte" şeklinde deglare edilmiş i değerinin alabileceği değerlerin 1 ile 255 olmasıdır demektir. bu değerden fazla olan değerin i ye atanması sonucunda bu hatayla karşılaşırsınız.

iyi çalışmalar. belki çözüm olmadı ama en azından kodda iiyileştirmelere artık gidebilirsiniz.