2012-09-23 4 views
7

새로운 버전의 Mandelbrot screensaver에서 작업 중이며 부동 소수점 정확도가 부족합니다. 간단합니다. double 값에 충분한 숫자가 필요하지 않습니다.C#의 경우 "extended"와 동일합니까?

더 유효 숫자 = 내가 델파이 7이 스크린 세이버의 버전을 쓸 때 프랙탈

돌아 가기로 확대의 높은 수준, 나는 extended 부동 소수점 유형, 크기 80 비트를 사용했다.

. NET에서 decimal으로 전환 할 수는 있지만 실적이 좋지 않아 프랙탈 생성이 20 배 정도 느려집니다.

에 해당하는 확장 프로그램이 있습니까? .NET 용? 또는, double보다 높은 정밀도를 갖는 수치 유형이 있습니까? 따라서 소수점의 높은 성능을 발휘하지 못합니까?

업데이트

내 스크린 세이버는 이미 다양한 크기 (! 많은) 주문하여 프랙탈을 확대하기 위해 관리; 현재 사용중인 숫자 유형이 인접한 픽셀에 대한 세로 좌표를 분리 할 수없는 경우에만베이스 프랙탈로 재설정됩니다. 2 배 확장 된 개선의 추가 16 비트 정밀도 덕분에 크기가 16 배 더 늘어났습니다. 성능에 관해서는

, 내 알고리즘은 이미 프랙탈의 무결성을 유지하면서, (많은 픽셀을 계산하는 순진 구현에 비해) 필요한 수학의 95~99%을 제거하기 위해 관리합니다. 64 비트 플랫폼에

+0

확장은 x86에서 80 비트 부동 소수점 레지스터를 사용하기 때문에 원시 코드를 작성해야 할 수도 있습니다. 아니면 프로그램의 굶주림을 줄이는 것이 더 정확한지 확실하지 않습니다. 나는 이것에 대해 전문가가 아니므로 더 이상의 조언을 드릴 수는 없습니다. – nhahtdh

답변

4

Extended 유형은 는 8 바이트 더블, 별칭입니다. 32 비트 플랫폼에서 Extended 숫자는 10 바이트 (80 비트)로 표시됩니다.

즉, 64 비트 플랫폼에서도 델파이 프로그램이 제대로 작동하지 않을 수도 있습니다. 당신이 64bit를 초과하는 숫자 데이터 유형이 필요한 경우

다음 decimal 갈과 성능을 향상시키기 위해 알고리즘을 최적화 할 수 있습니다.

+0

동의. 나는 당신이 (매우 quck 속도에 거의 무한히 깊은 가서 많은 프로그램이있다는 사실에 의해 입증) Mandlebrot가 렌더링 고해상도을 계산하기보다 절대 정밀도를 필요가 있다고 생각하지 않습니다. 나는 OP가 단지 문제를 다르게 해결할 필요가 있다고 생각한다. – Dai