Commodore sayı 75, sayfa 19

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 19

Uzun zamandır ROM rutinlerini incelemek için gerekli hazırlıklarla uğraşıyorduk. Tabii ki bu arada birkaç önemli rutin gördük, ama bunların hiçbiri size söz verdiğim SIN, COS, vb. fonksiyonlarını yapmanızı sağlamıyordu. Geçen ay işlememiz gereken son konuyu, yani değişkenlerin ve dizilerin yapılarını da anlattıktan sonra, ertelenebilecek hiçbir konu kalmadı. Artık BASIC'in yapabileceği tüm matematik işlemlerini makine dilinde yaptırmayı sağlayacak bilgileri vereceğim. Ama her şeyden önce geçen sayının ROM'unda yapılan bir hatayı düzeltmek istiyorum: İlk örneğimizde 7 ile 13'ü birbiriyle çarpmak istiyorduk, ama çarpma rutininde $BA2B'ye değil $BF2B'ye sıçramanız gerektiği yazılmış. Aslında ufak bir hata gibi görülebilir, ama düzeltilmezse programınız hiçbir zaman çalışmaz. Doğru adresler için aynı sayıda yayınlanmış olan küçük tabloyu kullanmanız gerekiyor. Basit işlemler dışında kalan işlemleri tek tek vermek yerine, daha genel olan fonksiyonlardan bahsedeceğim biraz. Matematikçiler fonksiyonları

Y=F(X)

olarak yazmaya bayılırlar. Buradaki X, fonksiyonun girdisi, ya da argümanı, F fonksiyon ve Y'de sonuçtur. Kayan noktalı fonksiyonları çağırmadan önce argüman X, ya da kısaca FAC'a yerleştirilmiş olmalıdır. Sonuç Y, fonksiyondan dönüldükten sonra gene FAC'da bulunabilir. BASIC yorumlayıcısının kullandığı fonksiyonlar ve adreslerini Tablo 1'de görebilirsiniz. Bu tablodaki hesap uzunlukları PI sayısını argüman olarak verdikten sonra hesaplanmıştır.

Vedat Hallaç

İsim Adres Hesaplanma süresi - Açıklama ABS $BC58 0.0 ms mutlak değer ATN $E30E 44.6 ms arctanjant COS $E264 27.9 ms cosinüs EXP $BFED 26.6 ms e üzeri .. FRE $B37D 0.6 ms boş bellek miktarı INT $BCCC 0.9 ms tam değer fonksiyonu LOG $B9EA 22.2 ms doğal logaritma POS $B39E 0.3 ms cursor'un bulunduğu kolon RND $E097 3.5 ms rastlantısal sayı SGN $BC39 0.4 ms işaret SIN $E26B 24.5 ms sinüs SQR $BF71 51.2 ms kök TAN $E2B4 49.8 ms tanjant

BASIC işlemcisinin fonksiyonları ve adresleri.

Tablodan da görebileceğiniz gibi, fonksiyonların uzunlukları üç ana grupta toplanmış: Neredeyse 0 olanlar, 20-30 arası ve 44-50 arası. Ve gene fark edeceğiniz gibi; SIN, COS, EXP, LOG, TAN, ATN, SQR gibi komutlar göreli olarak daha uzun sürüyorlar. Bu fonksiyonların özellikleri, daha ön-

ce nasıl yapıldığını gördüğümüz dört işlemle hesaplanamamaları. Bunun yanında, değerlerinin de tam olarak bulunması imkansız. Ancak dört işlem kullanarak yaklaşık değerleri hesaplanabilir. Matematikçiler sağ olsunlar, bu tür fonksiyonların polinom gösterimi kullanılarak da hesaplanabileceğini bulmuşlar (konuya ilgi duyanlar MacLaurin ve Taylor Serileri konusunda bilgi edinmeye çalışabilirler). Bu polinomlar aşağıdaki formdadırlar:

A4a5Xx.54..

Eğer y'nin gerçek değerini bulmak isterseniz sonsuz sayıda terimi hesaplamalısınız. Tabii ki pratikte bunu yapmanız imkansız olacağı için gerçek değere yeterince yaklaştığınız bir noktada bu seriyi kesmeniz gereklidir. Bu da kaçınılmaz olarak gerçek değerden küçük bir miktar uzaklaştıracaktır sizi. Ne kadar fazla terim alırsanız o kadar kesin sonuçlar alırsınız, fakat hesabınız da oldukça uzar bu arada. Bu polinomların (diyelim ki) ilk altı terimini hesaplamak isterseniz

14 çarpım ve beş de toplama yapmanız gerekecektir (çarpılan terimleri birbirine eklemek için). Fakat bu işlemi yapmak için önerilen bir başka metod da vardır (Teşekkürler matematikçiler...). “Horner Metodu” adı verilen bu metod sayesinde beş terimlik bir işlemi parantezlere alarak şu şekilde yazabiliriz:

ya Xxtal

Bu sayede sadece beş çarpma ve beş toplama y'nin değerini hesaplamaya yetecektir. Genel olarak n. dereceden bir polinomun belli bir x için değerini hesaplamak

Klavyeyle gezinmek için ← ve → tuşları.