2008-10-13 17 views
5

Bir sonraki projemi C++ yerine (SlimDX kullanarak) C# yerine yapmayı planlıyorum.C# - 32 bitlik bir float matematik kütüphanesi var mı?

Tüm directX, float kullanır, ancak System.Math iki misli kullanır. Bu, sürekli olarak şamandıralar ve çiftler arasında dönüştürme anlamına gelir. Ben her zaman her durumda çiftlerde gelen yüzen dönüştürmek herhangi bir ek hassasiyet alamıyorum çünkü

yüzden ideal zaman ..., şamandıralar kullanılmadan tüm kodu yazmak istiyorum

Ancak Ive bulamadığı float kullanan .net için matematik işlevlerinin kümesi. Tabii ki kendi kütüphanemimi C# 'ye yazabilirim, fakat bunun yerine optimize edilmiş olan bir kütüphaneyi kullanıyorum ...

+0

: [https://github.com/dotnet/corefx/issues/1151] (https://github.com/dotnet/corefx/ sorunların/1151). – ghord

cevap

2

XNA birkaç matematik sabiti (PI/2 vb. Gibi 3D uzmanları dahil) ve bazı gelişmiş Float hassasiyeti ile matematik fonksiyonları (trigonometrik fonksiyonlar olmasa da). Bu büyük olasılıkla sizin için bir seçenek olmasa da, XNA SlimDX kadar ince olmadığı için, kesinlikle System.Math'in aslında bir şey eksik olduğu veya performans isabetinin o kadar büyük olmadığı anlamına gelir. Benim deneyimime göre, aslında kendiniz için o kadar çok şey hesaplamıyorsunuz, çünkü bunların çoğu ya geometri sınıfları (Matrix, Quaternion, Vector) ya da GPU tarafından ele alınmaktadır.

Bu açıdan baktığımızda SlimDX'in ne sunduğunu incelerim. Matrisler, vektörler, kuaternionlar (ve hatta 16 bit floatlar) gibi tipik şeyler zaten orada gibi görünüyor. Şamandıra kesinliklerine sahip bazı sabitleri kaçırıyorsanız, bunları kendiniz oluşturun (her defasında, sadece başlangıçta dökümün yapılması gerekmez).

1

Evet, gerekli tüm hassaslık ise, uçlarda uçtan uca çalışarak çok önemli performans kazancı elde edersiniz.

CenterSpace yazılımının NMath kitaplıklarına bakın. Kayan, çift ve karmaşık türler, kitaplık boyunca sürekli olarak desteklenir.

Paul

corelcr için sadece bu talep eden github üzerinde bir sorun var
+0

Dönüşümlerin maliyeti önemsiz olsa da, performans kazanımları ne kadar sıklıkla operasyonlarını gerçekleştirdiğine bağlıdır. Sin/Cos vb .'nin System.Math versiyonunu kullanıyorum ama sadece kamera hareketi başına bir avuç kullanıyorum, yani kütüphaneleri değiştirmek için bir kare bile alamayacağım anlamına geliyor. Ancak, birincil iş yükünüz olarak (örneğin CPU'daki prosedürel arazi üretimi), sabit float işlemleri yapıyorsanız, bunları böyle bir kütüphaneyle yapmak iyi bir fikirdir. – Guvante

İlgili konular