2008-10-13 10 views
5

Planeo hacer mi próximo proyecto en C# en lugar de C++ (usando SlimDX).C# - ¿Hay una biblioteca de matemática flotante de 32 bits?

Todo directX usa flotadores, sin embargo System.Math usa dobles. Esto significa convertir constantemente entre flotantes y dobles.

De manera ideal, me gustaría escribir todo el código usando flotadores, ya que ahora no recibo ninguna precisión añadido convertir a flote desde dobles todo el tiempo de todos modos ...

Sin embargo he sido incapaz de encontrar una conjunto de funciones matemáticas para .net que usa flotadores. Por supuesto, podría escribir mi propia biblioteca en C#, pero id más bien utilizar una biblioteca existente que se ha optimizado, etc. ...

+0

Hay un problema en github solicitando exactamente esto para corelcr: [https://github.com/dotnet/corefx/issues/1151] (https://github.com/dotnet/corefx/ issues/1151). – ghord

Respuesta

2

XNA proporciona varias constantes matemáticas (incluidos especialistas en 3D, como PI/2, etc.) y algunas avanzadas funciones matemáticas con precisión de flotación (aunque no las funciones trigonométricas). Si bien es muy probable que esa opción no sea una opción para usted, dado que XNA no es tan delgado como SlimDX, ciertamente significa que System.Math o se está perdiendo algo o el rendimiento no es tan grande. En mi experiencia, en realidad no calcula mucho para usted, porque la mayor parte de eso es manejado por las clases de geometría (Matrix, Quaternion, Vector) o la GPU misma.

Desde ese punto de vista, echaré un vistazo a SlimDX, lo que ofrecen. Parece que las cosas típicas como matrices, vectores, cuaterniones (e incluso flotantes de 16 bits) ya están allí. Si le faltan algunas constantes con precisiones de flotación, solo créelas usted mismo (no debe hacer el yeso cada vez, solo al inicio).

1

Sí, obtendrá ganancias de rendimiento muy significativas al trabajar de extremo a extremo en flotadores si esa es toda la precisión que se requiere.

Consulte las bibliotecas NMath del software CenterSpace. Los tipos flotante, doble y complejo son consistentemente compatibles en toda la biblioteca.

Paul

+0

Si bien el costo de las conversiones no es trivial, las ganancias de rendimiento dependen significativamente de la frecuencia con la que realiza las operaciones. He estado usando la versión System.Math de Sin/Cos, etc., pero solo las uso varias veces por movimiento de la cámara, lo que significa que no ganaría ni un fotograma por segundo después de cambiar las bibliotecas. Sin embargo, si está realizando operaciones de flotación incondicionales como su carga de trabajo principal (por ejemplo, generación de terreno de procedimientos en la CPU), es una buena idea hacerlo con dicha biblioteca. – Guvante

Cuestiones relacionadas