2012-09-23 17 views
7

Ich arbeite an einer neuen Version meiner Mandelbrot screensaver und mir geht die Fließkommagenauigkeit aus - einfache double Werte haben nicht genug signifikante Zahlen für meine Bedürfnisse.Jedes Äquivalent von "erweitert" für C#?

Bedeutsamer Zahlen = höheres Maß an Zoomen in die fraktale

Damals, als ich eine Version dieses Bildschirmschoner in Delphi 7, schrieb verwendete ich den extended Gleitkommatyps, 80 Bit groß.

In .NET könnte ich zu decimal wechseln, aber die Leistung für diesen Hit ist schrecklich, Verlangsamung Fraktale Generation um einen Faktor von 20 oder so.

Gibt es ein Äquivalent von erweitert für .NET? Oder gibt es alternativ numerische Typen mit höherer Genauigkeit als double, die immer noch die FPU für die Auswertung verwenden und daher nicht den hohen Leistungshit von dezimal haben?

aktualisieren

My Screensaver verwaltet bereits von vielen (viele!) Größenordnungen in die fraktale zu vergrößern; Zur Zeit wird es nur dann auf das Basisfraktal zurückgesetzt, wenn der verwendete numerische Typ die Ordinaten für benachbarte Pixel nicht trennen kann. Die zusätzlichen 16 Bits Präzision von der doppelt erweiterten Verbesserung würden mir fast 16 weitere Verdopplungen der Größe geben.

In Bezug auf die Leistung, schafft es mein Algorithmus bereits, 95-99% der benötigten Mathematik zu eliminieren (im Vergleich zu einer naiven Implementierung, die viele Pixel berechnet), während die Integrität des Fraktals erhalten bleibt.

+0

Wahrscheinlich müssen Sie dafür systemeigenen Code schreiben, da das Extended das 80-Bit-Gleitkommaregister in x86 verwendet. Oder ich bin mir nicht sicher, ob es möglich ist, den Hunger des Programms nach mehr Präzision zu reduzieren. Ich bin dafür kein Experte, daher kann ich keine weiteren Ratschläge geben. – nhahtdh

Antwort

4

Auf 64-Bit-Plattformen, die Extended Typ ist ein Alias ​​für Doppel, die ist nur 8 Bytes. Auf 32-Bit-Plattformen wird eine Extended-Nummer als 10 Byte (80 Bit) dargestellt.

Das bedeutet, dass sogar Ihr Delphi-Programm in 64-Bit-Plattformen nicht gut funktioniert.

Wenn Sie einen numerischen Datentyp mit mehr als 64 Bit benötigen, gehen Sie zu decimal und optimieren Sie Ihre Algorithmen, um die Leistung zu verbessern.

+0

Einverstanden. Ich glaube nicht, dass Sie mehr absolute Präzision benötigen, um hochaufgelöste Mandlebrot-Renderings zu berechnen (belegt durch die Tatsache, dass es viele Programme gibt, die in sehr schnellen Geschwindigkeiten nahezu unendlich tief gehen). Ich denke, dass das OP nur darüber nachdenken muss, das Problem anders zu lösen. – Dai