2008-10-13 4 views
5

저는 C++ 대신 SlimDX를 사용하여 다음 프로젝트를 할 계획입니다.C# - 32 비트 부동 소수점 라이브러리가 있습니까?

모든 directX는 float를 사용하지만 System.Math는 double을 사용합니다. 이는 부동 소수점과 복식간에 지속적으로 변환한다는 것을 의미합니다. 나는 모든 시간 어쨌든 복식에서 수레로 변환 추가 된 정밀도를받지 못했습니다 때문에

이상적으로 나는 ..., 수레를 사용하는 모든 코드를 작성하고 싶습니다

그러나 필자는 찾을 수 없었다 수레를 사용하는 .net을위한 수학 함수 세트. 물론 C#으로 제 자신의 라이브러리를 작성할 수는 있지만, id는 오히려 최적화 된 기존 라이브러리를 사용합니다 ...

+0

: [https://github.com/dotnet/corefx/issues/1151] (https://github.com/dotnet/corefx/ 문제점/1151). – ghord

답변

2

XNA는 PI/2와 같은 3D 전문가를 비롯한 여러 수학 상수를 제공하며 일부 고급 float 정밀도가있는 수학 함수 (삼각 함수는 아님). XNA는 SlimDX만큼 슬림하지 않기 때문에 System.Math가 실제로 뭔가 빠져 있거나 성능에 큰 영향을 미치지 않는다는 것을 의미합니다. 제 경험으로 볼 때, 대부분은 지오 메트릭 클래스 (Matrix, Quaternion, Vector) 또는 GPU 자체로 처리되기 때문에 실제로 계산하지는 않습니다.

그런 관점에서 SlimDX에 대해 살펴 보았습니다. 행렬, 벡터, 쿼터니언 (심지어 16 비트 부동 소수점)과 같은 전형적인 것들이 이미 있습니다. 부동 소수점 정밀도가있는 상수가 누락 된 경우 직접 만들면됩니다 (시작할 때마다 캐스트를 수행하지 마십시오).

1

예, 필요한 모든 정밀도가 있으면 float에서 종단 간 작업을 수행하면 성능이 크게 향상됩니다.

CenterSpace 소프트웨어에서 NMath 라이브러리를 확인하십시오. 플로트, 더블 및 복합 유형은 라이브러리 전체에서 일관되게 지원됩니다.

corelcr만을위한이 요청 GitHub의에 문제가 있습니다
+0

변환 비용은 중요하지 않지만 성능 향상은 작업 수행 빈도에 따라 크게 달라집니다. 나는 Sin/Cos 등의 System.Math 버전을 사용하고 있었지만 카메라 이동마다 소수의 카메라 만 사용하기 때문에 라이브러리를 바꾸는 순간 프레임이 1 초도 늘어나지 않습니다. 그러나 하드 코어 플로팅 작업을 기본 워크로드로 수행하는 경우 (예 : CPU의 절차 적 지형 생성) 라이브러리와 함께 수행하는 것이 좋습니다. – Guvante