Bu yolu birkaç yıl önce kayan noktadan sabit noktaya bazı ses parmak izi kodlarını dönüştürmek zorunda kaldım. Sert parçalar, DCT (büyük bir kosinüs masası) ve yüksek hassasiyetli bir logaritma idi. Mevcut kütüphaneler yolunda şaşırtıcı derecede az şey buldum. O zamandan beri, orijinal Sony PlayStation'ın (PS1) hiçbir kayan nokta desteğinin olmadığını duydum. Bu nedenle, eğer hala var ise, sizin için geliştirme forumları (fori?) Aradığınız şeyi bulabilir. Çalıştığım bazı kişiler, NewMat kütüphanesi ile, trigonometriden ziyade doğrusal cebire doğru yönlendirilmiş olsa da, kayan nokta sayılarına odaklanmış gibi görünüyor. Yine de, site kontrol etmeye değer görünüyor this list yol açar. Ayrıca sabit nokta desteği için iyi olabilecek bir sinyal işleme kitaplığı da bulduğum spuc. Ve yıllar önce Fraunhofer'den bir sinyal işleme şablonu kütüphanesi (sptl) gördüm. Bence tescilliydi ama bir şekilde mevcut olabilir.
Tüm söylenenler, sanırım sahip olduklarınızla oldukça yakınsınız. Sinüs fonksiyonunuz olduğundan, girişi uygun şekilde dönüştürdüğünüzde temel olarak bir kosinüs fonksiyonuna sahip olursunuz (cos(x) == sin(x + pi/2)
). Tanjant, sinüs ve kosinüsün (tan(x) = sin(x)/cos(x)
) bölümü olduğundan, temel olarak trigonometri için oradasınız.
Vektörlerle ilgili olarak, STL vektörleri ve valarray sınıfları, STL algoritmalarıyla birleştirilmediyse, siz de yakınlaşır mısınız? Değilse, her zaman Boost'un math libraries'u vardır.
Üzgünüz, sizi aradığınız gümüş mermiye gösteremiyorum, ama yapmaya çalıştığınız şey bu günlerde oldukça nadirdir. Hassasiyet isteyen kişiler genellikle modern işlemciler üzerinde iyi bir performansa ve kayan kütüphane desteğine sahip olan kayan noktaya giderler. Kaynak kısıtlı donanım üzerinde hız isteyenlerin genellikle hassas olmalarına gerek yoktur ve vektör tarafından trig yapmıyorlar ve muhtemelen C++ yapmıyorlar. Bence en iyi seçeneğin kendi kendine yuvarlanmak. Bunu yeniden keşfetmekten ziyade, tekerlek tasarım modelini yeni bir bağlamda uygulamak olarak düşünmeye çalışın. :)
Bu günah için nasıl bir yaklaşımdır? – TonyK
Gerçekten bilmiyorum. Bir yıl önce kayan nokta sinek yaklaştırmasına dayanarak, sanırım, bazı parabolik fonksiyonları kullanarak yazdım. Tamsayıya çekildikten sonra, yukarıdaki sonuçlandı. Orijinal işlevi unuttum Artık nasıl çalıştığını bilmiyorum. Yine de neredeyse mükemmel bir daire çiziyor. – porgarmingduod
Oh, şimdi onu görüyorum. Aralığın her bir yarısına 0 ve 2'de sıfırlar ve maks/dk değeri +/- 1 olan bir parabol olarak yaklaşır. Güzel! – TonyK