18 Matematiksel Kütüphane

18 Matematiksel Kütüphane 

Bu ve sonraki bölümler standart kütüphaneler hakkında olacak , amacım her bir fonksiyonun bütün tanımlamasını vermek değil kütüphanenin ne tür bir işlevsellik sağlayabileceğini göstermek. Bazı şeylerin net olması için bazı ince seçenekleri veya davranışları atlayabilirim. Ana fikir ilginizi köreltmemek, ayrıntılar için Lua kullanıcı kılavuzuna bakabilirsiniz.

math kütüphanesi trigonometrik fonksiyonlar (sin, cos, tan, asin, acos vb.) , üssel ve logaritmalar (exp, log, log10), yuvarlama fonksiyonları (floor, ceil),  rasgele sayılar üreten fonksiyonlar (random, randomseed), temsil edilebilir en büyük sayı olan huge(huge bazı platformlarda inf olabiliyor) , max, min, pi gibi standart matematiksel fonksiyonlar kümesinden oluşur.

Tüm trigonometrik fonksiyonlar radyan cinsinden çalışmakta. Derece ve radyan arasında dönüşüm için deg ve rad fonksiyonlarını kullanabilirsiniz. Derece cinsinden çalışmak istiyorsanız trigonometrik fonksiyonları yeniden tanımlayabilirsiniz:

local sin, asin, ... = math.sin, math.asin, ...
local deg, rad = math.deg, math.rad
math.sin = function (x) return sin(rad(x)) end
math.asin = function (x) return deg(asin(x)) end
...

math.random fonksiyonu rasgele sayılar üretir. Üç şekilde çağırabiliriz. Argümansız çağırdığımızda [0, 1] aralığında  dağılıma sahip rasgele bir gerçek sayı döndürür. Tek argüman olarak bir n tamsayısı ile çağırdığımızda 1 ≤ x ≤ n olmak üzere rasgele bir x tamsayısı döndürür. Örneğin  random(6) ile bir tavla zarını simüle edebilirsiniz. Son olarak l ve u gibi iki tamsayı argüman ile random'u çağırabiliriz l ≤ x ≤ u olmak üzere rasgele bir x tamsayı elde etmek için.

randomseed fonksiyonu ile rastgele üretim için bir başlangıç-tohum set edebilirsiniz; tek argümanı sayısal başlangıçtır. Genellikle bir program başladığında üreteç sabit bir tohumla başlar. Bu, programınızı her çalıştırdığınızda aynı rasgele sayı dizisi oluşturacağı anlamına gelir. Hata ayıklama için bu güzel bir özelliktir; ancak bir oyunda aynı senaryoya tekrar tekrar sahip olacaksınız. Bu sorunu çözmek için yaygın bir hile tohum olarak zamanı kullanmaktır:

math.randomseed(os.time())

os.time fonksiyonu belli bir tarihten bu yana geçen saniye olarak mevcut zamanı temsil eden bir sayı döndürür. 

math.random fonksiyonu standart C kütüphanesinden rand fonksiyonunu kullanır. Bazı uyarlamalarda bu fonksiyon çok iyi olmayan istatistiksel özelliklere sahip sayılar üretir. Lua için daha iyi rasgele üreteçlere sahip bağımsız kütüphanelere bakabilirsiniz. (Standart Lua dağıtımı telif hakkı sorunlarını önlemek için böyle bir harici üreteç kütüphanesi içermez. Burada sadece Lua yazarları tarafından yazılmış kodlar bulunur.)





Hiç yorum yok:

Yorum Gönder