Wie kann VB6 Doubles mit + unendlich, -infinity und NaN initialisieren?

7

VB6 scheint es nicht so einfach zu machen, + Unendlichkeit, -Unendlichkeit und NaN in Doppelvariablen zu speichern. Es würde helfen, wenn es möglich wäre, Vergleiche mit diesen Werten im Kontext komplexer Zahlen zu machen. Wie?

    
bugmagnet 20.05.2009, 03:18
quelle

3 Antworten

12

Ein paar verschiedene Dinge. Wie Sie aus dem Beispiel von Pax sehen können, müssen Sie nur den Standard IEEE 754 nachschlagen und dann Ihre Bytes an den richtigen Stellen anschließen. Die einzige Vorsichtsmaßnahme, die ich Ihnen geben würde, ist, dass MicroSoft RtlMoveMemory aufgrund seines Potenzials für veraltet erklärt hat Erstellen von Sicherheitsproblemen des Überlauftyps. Alternativ können Sie dies in "reinem" VB mit ein wenig vorsichtigem Zwang unter Verwendung von benutzerdefinierten Typen und LSet erreichen. (Beachten Sie auch, dass es zwei Arten von NaN gibt.)

%Vor%

Eine letzte Randnotiz, Sie können NaN auch so erhalten:

%Vor%     
Oorang 22.05.2009, 04:04
quelle
17

Tatsächlich gibt es einen viel einfacheren Weg, um Unendlichkeit, Unendlichkeit und keine Zahl zu erhalten:

%Vor%     
YogoZuno 20.05.2009 04:37
quelle
4

Diese Seite zeigt eine leicht quälende Art und Weise, dies zu tun. Ich habe es reduziert, um zu entsprechen, was Ihre Frage verlangt, aber nicht gründlich getestet. Lass es mich wissen, wenn es Probleme gibt. Eine Sache, die ich auf dieser Seite bemerkte, war, dass der Code, den sie für ein ruhiges NaN hatten, falsch war, sie sollte die Mantisse mit einem 1-Bit beginnen - sie hatten das mit einem Signal NaN verwechselt.

%Vor%

%Vor%

Es verwendet grundsätzlich Kernel-Level-Speicherkopien, um die Bitmuster von einem Byte-Array zum Double zu übertragen.

Sie sollten jedoch beachten, dass es mehrere -Bitwerte gibt, die QNaN darstellen können, insbesondere kann das Vorzeichenbit 0 oder 1 sein und alle Bits der Mantisse außer der ersten können auch sein Null oder 1. Dies kann Ihre Strategie für Vergleiche komplizieren, es sei denn, Sie können feststellen, ob VB6 nur eines der Bitmuster verwendet - es beeinflusst jedoch nicht die Initialisierung dieser Werte, vorausgesetzt VB6 implementiert IEE754-Doubles richtig.

    
paxdiablo 20.05.2009 03:34
quelle

Tags und Links