Trigonometrik tablolar

Matematikte, trigonometrik fonksiyon tabloları bir dizi alanda yararlıdır. Küçük hesap makinelerinin varlığından önce, **trigonometrik tablolar** navigasyon, bilim ve mühendislik için gerekliydi. Matematiksel tabloların hesaplanması önemli bir çalışma alanıydı ve bu da ilk mekanik hesaplama cihazlarının geliştirilmesine yol açtı.

Modern bilgisayarlar ve cep hesap makineleri artık özel matematiksel kod kütüphaneleri kullanarak talep üzerine trigonometrik fonksiyon değerleri üretmektedir. Bu kütüphaneler, genellikle önceden hesaplanmış tabloları dahili olarak kullanır ve gerekli değeri uygun bir interpolasyon (iç-değer biçme) yöntemi kullanarak hesaplar. Trigonometrik fonksiyonların basit aramalı tabloların interpolasyonu, yalnızca kabul edilebilir bir doğruluğun gerekli olabileceği ve hızın genellikle çok önemli olduğu bilgisayar grafikleri alanında hala kullanılmaktadır.

Trigonometrik tabloların ve hesaplama şemalarının bir diğer önemli uygulaması da hızlı Fourier dönüşümü (FFT) algoritmalarıdır; burada aynı trigonometrik fonksiyon değerleri (“twiddle faktörleri” olarak adlandırılır) belirli bir dönüşümde, özellikle de aynı boyutta birçok dönüşümün hesaplandığı yaygın durumda birçok kez değerlendirilmelidir. Bu durumda, her seferinde genel kütüphane rutinlerini çağırmak kabul edilemeyecek kadar yavaştır. Bir seçenek, ihtiyaç duyulacak trigonometrik değerlerin bir tablosunu oluşturmak için kütüphane rutinlerini bir kez çağırmaktır, ancak bu tabloyu saklamak için önemli miktarda bellek gerektirir. Diğer olasılık, düzenli bir değer dizisi gerektiğinden, trigonometrik değerleri anında hesaplamak için bir yineleme formülü kullanmaktır. FFT'nin doğruluğunu korumak için (trigonometrik hatalara karşı çok hassastır) doğru, kararlı yineleme şemaları bulmaya yönelik önemli araştırmalar yapılmıştır.

Trigonometri tablosu esasen çeşitli açılar için sinüs, kosinüs, tanjant ve diğer trigonometrik fonksiyonların değerlerini içeren ve kullanıcılara sunan bir referans tablosudur. Bu açılar genellikle tablonun üst sırası boyunca düzenlenirken, farklı trigonometrik fonksiyonlar soldaki ilk sütunda etiketlenir. Belirli bir açıda belirli bir trigonometrik fonksiyonun değerini bulmak için, fonksiyonun satırını bulur ve istenen açının altındaki sütuna kadar takip edersiniz.

## Bir trigonometri tablosunu kullanmak birkaç basit adım içerir
# Trigonometrik değerleri bulmanız gereken spesifik açıyı belirleyin.
# Bu açıyı tablonun yatay ekseni (üst satır) boyunca arayıp bulun.
# Dikey eksenden (ilk sütun) ilgilendiğiniz trigonometrik fonksiyonu seçin.
# Fonksiyon boyunca ve açıdan aşağıya doğru tabloda kesiştikleri noktaya kadar izleyin; bu kesişme noktasındaki sayı, o açı için trigonometrik fonksiyonun değerini verir.

## İsteğe bağlı hesaplama

Modern bilgisayarlar ve hesap makineleri keyfi açılar için talep üzerine trigonometrik fonksiyon değerleri sağlamak için çeşitli teknikler kullanmaktadır (Kantabutra, 1996). Özellikle kayan nokta birimlerine sahip üst düzey işlemcilerde yaygın bir yöntem, bir polinom veya rasyonel yaklaşıklık (örneğin Chebyshev yaklaşıklığı, en iyi düzgün yaklaşım, Padé yaklaşımı ve tipik olarak daha yüksek veya değişken kesinlikler için Taylor ve Laurent serisi) aralık azaltma ve tablo arama &mdash; önce küçük bir tabloda en yakın açıyı ararlar ve ardından düzeltmeyi hesaplamak için polinomu kullanırlar. Böyle bir interpolasyon gerçekleştirirken hassasiyeti korumak önemsizdir, ancak Gal'in doğru tabloları, Cody ve Waite aralık azaltma ve Payne ve Hanek radyan azaltma algoritmaları gibi yöntemler bu amaç için kullanılabilir. Bir donanım çarpanı bulunmayan daha basit cihazlarda, CORDIC (ve ilgili teknikler) adı verilen ve yalnızca kaydırma ve toplama işlemlerini kullandığı için daha verimli olan bir algoritma vardır. Bu yöntemlerin tümü, performans nedenleriyle donanımda yaygın olarak uygulanmaktadır.

Bir trigonometrik fonksiyona yaklaşmak için kullanılan belirli polinom, en küçük-en büyük yaklaşım algoritmasının bir yaklaşımı kullanılarak önceden oluşturulur.

Çok yüksek hassasiyetli hesaplamalar için, seri-genişleme yakınsaması çok yavaş olduğunda, trigonometrik fonksiyonlar aritmetik-geometrik ortalama ile yaklaştırılabilir, bu da trigonometrik fonksiyonu (kompleks) eliptik integral ile yaklaştırır (Brent, 1976).

2'nin rasyonel katları olan açıların trigonometrik fonksiyonları cebirsel sayılardır. *a/b-2* değerleri, *n = a* için de Moivre özdeşliği, aynı zamanda karmaşık düzlemde *x<sup>b</sup> - 1* polinomunun bir kökü olan *b*inci birimin köküne uygulanarak bulunabilir. Örneğin, 2&nbsp;⋅&nbsp; 5/37'nin kosinüs ve sinüsü, sırasıyla, 37. dereceden *x*37&nbsp;&minus;&nbsp;1 polinomunun bir kökü olan, cos(2π/37) + sin(2π/37)i birliğinin 37. kökünün 5. kuvvetinin gerçek ve sanal kısmıdır. Bu durum için, Newton yöntemi gibi bir kök bulma algoritması, benzer bir asimptotik oranda yakınsarken yukarıdaki aritmetik-geometrik ortalama algoritmalarından çok daha basittir. Ancak ikinci algoritmalar transandantal trigonometrik sabitler için gereklidir.

## Yarım açı ve açı toplamı formülleri
Tarihsel olarak, trigonometrik tabloların hesaplandığı en eski ve bilgisayarların ortaya çıkışına kadar muhtemelen en yaygın olan yöntem, bilinen bir değerden başlayarak (sin(π/2)&nbsp;=&nbsp;1, cos(π/2)&nbsp;=&nbsp;0 gibi) yarım açı ve açı toplamı için trigonometrik özdeşlik yöntemlerini tekrar tekrar (yani yinelemeli olarak) uygulamaktı. Bu yöntem, astronomi üzerine bir inceleme olan *[[Almagest]]* adlı eserinde bunları türeten antik Yunan astronom Batlamyus tarafından kullanılmıştır. Modern formda, türettiği özdeşlikler aşağıdaki gibi ifade edilir (*x*in bulunduğu çeyrek tarafından belirlenen işaretlerle):

:\cos\left(\frac{x}{2}\right) = \pm \sqrt{\tfrac{1}{2}(1 + \cos x)}

:\sin\left(\frac{x}{2}\right) = \pm \sqrt{\tfrac{1}{2}(1 - \cos x)}

:\sin(x \pm y) = \sin(x) \cos(y) \pm \cos(x) \sin(y)\,

:\cos(x \pm y) = \cos(x) \cos(y) \mp \sin(x) \sin(y)\,

Bunlar astronomi problemlerine uygulanan Batlamyus kirişler tablosunu oluşturmak için kullanılmıştır.

Bu özdeşlikler üzerinde başka permütasyonlar da mümkündür: örneğin, bazı erken dönem trigonometrik tablolarda sinüs ve kosinüs değil, sinüs ve versinüs kullanılmıştır.

## Hızlı ama kusurlu bir yaklaşım
*N* yaklaşım tablosunu hesaplamak için hızlı, ancak hatalı bir algoritma sin(2&pi;*n*/*N*) için *s**n* ve  cos(2π*n*/*N*) için *c**n*:

:*s*0 = 0
:*c*0 = 1
:*s**n*+1 = *s**n* + *d* &times; *c**n*
:*c**n*+1 = *c**n* &minus; *d* &times; *s**n*
*n* = 0,...,*N*&nbsp;&minus;&nbsp;1 için, burada *d* = 2π/*N*.

Bu basitçe diferansiyel denklemin integralini almak için Euler yöntemidir:

:ds/dt = c
:dc/dt = -s

*s*(0) = 0 ve *c*(0) = 1 başlangıç koşulları ile analitik çözümü *s* = sin(*t*) ve *c* = cos(*t*) şeklindedir.

Ne yazık ki, bu sinüs tabloları oluşturmak için kullanışlı bir algoritma değildir çünkü 1/*N* ile orantılı önemli derecede bir hatası vardır.

Örneğin, *N* = 256 için sinüs değerlerindeki maksimum hata ~0.061'dir (*s*202 = &minus;0,9757 yerine &minus;1,0368). *N* = 1024 için, sinüs değerlerindeki maksimum hata ~0,015 (*s*803 = &minus;0,97832 yerine &minus;0,99321), yani yaklaşık 4 kat daha küçüktür. Eğer elde edilen sinüs ve kosinüs değerleri çizilecek olsaydı, bu algoritma bir daire yerine logaritmik bir spiral çizerdi.

## Daha iyi, ancak hala kusurlu bir yineleme formülü
Trigonometrik tablolar oluşturmak için basit bir yineleme formülü, Euler formülü ve ilişkiye dayanır:

:e^{i(\theta + \Delta)} = e^{i\theta} \times e^{i\Delta\theta}

Bu, yukarıdaki gibi trigonometrik *s**n* ve *c**n* değerlerini hesaplamak için aşağıdaki yinelemeye yol açar:

:*c*0 = 1
:*s*0 = 0
:*c**n*+1 = *w**r* *c**n* &minus; *w**i* *s**n*
:*s**n*+1 = *w**i* *c**n* + *w**r* *s**n*

*n* = 0, ..., *N*&nbsp;&minus;&nbsp;1 için, burada *w**r* = cos(2π/*N*) ve *w**i* = sin(2π/*N*). Bu iki başlangıç trigonometrik değeri genellikle mevcut kütüphane fonksiyonları kullanılarak hesaplanır (ancak örneğin karmaşık düzlemde Newton yöntemi kullanılarak *z**N*&nbsp;&minus;&nbsp;1'in ilkel kök için çözülerek de bulunabilir).

Bu yöntem kesin aritmetikte *tam* bir tablo üretir, ancak sonlu hassasiyetli kayan nokta aritmetiğinde hatalar vardır. Aslında, hatalar O(ε&nbsp;*N*) olarak büyür (hem en kötü hem de ortalama durumlarda), burada ε kayan nokta hassasiyetidir.

Önemli bir gelişme, FFT uygulamaları için trigonometrik değerler üretmek üzere sıklıkla kullanılan bir hile (Singleton'a göre) olan yukarıdaki aşağıdaki modifikasyonu kullanmaktır:

:*c*0 = 1
:*s*0 = 0
:*c**n*+1 = *c**n*&nbsp;&minus;&nbsp;(&alpha; *c**n*&nbsp;+&nbsp;&beta; *s**n*)
:*s**n*+1 = *s**n*&nbsp;+&nbsp;(&beta;&nbsp;*c**n*&nbsp;&minus;&nbsp;&alpha;&nbsp;*s**n*)

Burada α = 2&nbsp;sin2(π/*N*) ve β = sin(2π/*N*). Bu yöntemin hataları çok daha küçüktür, ortalama olarak O(ε&nbsp;√*N*) ve en kötü durumda O(ε&nbsp;*N*), ancak bu hala büyük boyutlardaki FFT'lerin doğruluğunu önemli ölçüde azaltacak kadar büyüktür.

## Notlar


## Ayrıca bakınız
* Aryabhata sinüs tablosu
* CORDIC
* Tam trigonometrik değerler
* Madhava sinüs tablosu
* Sayısal analiz
* Plimpton 322
* Prosthaphaeresis

## Kaynakça
* Carl B. Boyer (1991) *A History of Mathematics*, 2nd edition, John Wiley & Sons.
* Manfred Tasche and Hansmartin Zeuner (2002) "Improved roundoff error analysis for precomputed twiddle factors", *Journal for Computational Analysis and Applications* 4(1): 1–18.
* James C. Schatzman (1996) "Accuracy of the discrete Fourier transform and the fast Fourier transform", SIAM Journal on Scientific Computing 17(5): 1150–1166.
* Vitit Kantabutra (1996) "On hardware for computing exponential and trigonometric functions," IEEE Transactions on Computers 45(3): 328–339 .
* R. P. Brent (1976) "Fast Multiple-Precision Evaluation of Elementary Functions", Journal of the Association for Computing Machinery 23: 242–251.
* 
* William J. Cody Jr., William Waite, *Software Manual for the Elementary Functions*, Prentice-Hall, 1980, .
* Mary H. Payne, Robert N. Hanek, *Radian reduction for trigonometric functions*, ACM SIGNUM Newsletter 18: 19-24, 1983.
* Gal, Shmuel and Bachelis, Boris (1991) "An accurate elementary mathematical library for the IEEE floating point standard", ACM Transactions on Mathematical Software.