2012-09-23 14 views
7

Sto lavorando a una nuova versione del mio Mandelbrot screensaver e sto esaurendo la precisione in virgola mobile: i valori semplici double non hanno cifre significative sufficienti per le mie esigenze.Qualunque equivalente di "esteso" per C#?

Ulteriori cifre significative = maggiori livelli di zoom nella frattale

nuovo quando ho scritto una versione di questo salvaschermo in Delphi 7, ho usato il tipo extended virgola mobile, 80 bit nel formato.

In .NET, è possibile passare a decimal, ma il risultato di prestazioni per questo è terribile, rallentando la generazione di frattali di un fattore di circa 20.

Esiste un equivalente di esteso a per .NET? Oppure, in alternativa, esistono tipi numerici con maggiore precisione rispetto allo doppio che utilizza ancora l'FPU per la valutazione e che pertanto non ha il rendimento elevato di decimale?

Aggiornamento

mio Screensaver riesce già per ingrandire nel frattale da molti (tanti!) Ordini di grandezza; al momento viene reimpostato al frattale di base solo quando il tipo numerico in uso non è in grado di separare le ordinate per i pixel adiacenti. I 16 bit in più di precisione del miglioramento a doppio esteso mi darebbero quasi 16 doppioni più grandi.

Per quanto riguarda le prestazioni, il mio algoritmo riesce già a eliminare il 95-99% dei calcoli richiesti (rispetto a un'implementazione ingenua che calcola molti pixel), mantenendo l'integrità del frattale.

+0

Probabilmente è necessario scrivere codice nativo per questo, poiché l'estensione fa uso del registro a virgola mobile a 80 bit in x86. O non sono sicuro se sia possibile ridurre la fame del programma per maggiore precisione. Non sono esperto in questo, quindi non posso dare ulteriori consigli. – nhahtdh

risposta

4

Su piattaforme a 64 bit, il tipo Extended è un alias per Double, che è solo 8 byte. Sulle piattaforme a 32 bit, un numero Extended viene rappresentato come 10 byte (80 bit).

Ciò significa che anche il tuo programma Delphi potrebbe non funzionare bene su piattaforme a 64 bit.

Se è necessario un tipo di dati numerici con più di 64 bit, andare su decimal e ottimizzare gli algoritmi per migliorare le prestazioni.

+0

concordato. Non penso che sia necessaria una precisione più assoluta per calcolare i rendering ad alta risoluzione di Mandlebrot (dimostrato dal fatto che ci sono molti programmi che si avvicinano all'infinitamente alla velocità di quck). Penso che l'OP debba solo pensare a risolvere il problema in modo diverso. – Dai