Das Steuerwortregister des mathematischen Koprozessors
    (FPU = Float Processing Unit)
  
  
    Der Ablauf von Rechenoperationen mit Gleitkommazahlen wird durch dieses
    Register gesteuert.
    Im Wesentlichen wird hier eingestellt, ob Ausnahmefehler behandelt werden
    oder nicht.
    Viele Anwendungen und DLLs verändern beim Laden die Einstellung entsprechend
    ihren Anforderungen.  Ob die Voreinstellung dabei gesichert und nach
    dem Beenden wieder zurückgesetzt wird, ist lediglich eine Frage der Hygiene.
  
  
    
      Invalid Operation Exception
    
    
      Ungültige Gleitkommaoperation
    
    
      Dieser Schalter ist per Voreinstellung deaktiviert, so dass alle
      unbehandelten Ausnahmen einen Fehler ausgelösen.
      Die Ausnahme tritt bei einer nicht definierten Anweisung, einer ungültigen
      Rechenoperation oder einem Gleitkommastapelüberlauf (stack overflow) ein.
    
    Denormalized Operand Exception
    
    
      Fehler durch denormalisierten Operanden
    
    
      Dieser Schalter ist per Voreinstellung aktiviert, so dass kein Fehler
      ausgelöst wird.
      Die Ausnahme tritt bei einer Rechenoperation mit den denormalisierten
      Operanden NAN (Not a Number) oder 
      INF (Infinity) ein.
    
    Zero Divide Exception
    
    
      Fehler bei Teilung durch Null
    
    
      Dieser Schalter ist per Voreinstellung deaktiviert, weil das Ergebnis
      mathematisch nicht definiert ist.
      Die FPU löst einen Ausnahmefehler aus und gibt den Wert 
NAN (Not a Number) zurück.
      
        Wird die Ausnahmebehandlung dagegen aktiviert, ist das Resultat der
        Wert INF (Infinity).
        Der Aufrufer übernimmt die weitere Behandlung dieses denormalisierten
        Operanden.
      
    Overflow Exception
    
    
      Gleitkommaüberlauf
    
    
      Dieser Schalter ist per Voreinstellung deaktiviert, weil bei einem
      Registerüberlauf Daten verloren gehen, wenn ein Berechnungsergebnis größer
      ist, als es der durch die eingeschränkte Genauigkeit bestimmte,
      signifikante Bereich zulässt.
      Ein Ausnahmefehler wird ausgelöst und der Wert 
NAN (Not a Number)
      zurückgegeben.
      
        Wird die Ausnahmebehandlung dagegen aktiviert, dann wird kein Fehler
        ausgelöst.
        Das Resultat ist der Wert INF
        (Infinity).
        Der Aufrufer übernimmt die weitere Behandlung dieses denormalisierten
        Operanden.
      
    Underflow Exception
    
    
      Gleitkommaunterlauf
    
    
      Dieser Schalter ist per Voreinstellung aktiviert, so dass kein Fehler
      ausgelöst wird, sondern 0 als Ergebnis geliefert wird.
      Ein Gleitkommaunterlauf tritt auf, wenn das Ergebnis einer Rechenoperation
      zu klein ist, um es in dem durch die eingeschränkte Genauigkeit
      bestimmten, signifikanten Bereich abzubilden.
      
        Wird die Ausnahmebehandlung deaktiviert, dann wird ein Fehler
        ausgelöst, und das Steuerwort anschließend zurück gesetzt.
      
    Precision Exception
    
    
      Rechengenauigkeitsfehler
    
    
      Dieser Schalter ist per Voreinstellung aktiviert, so dass kein Fehler
      ausgelöst wird.
    
    Exception Interrupt Disabled
    
    
      Ausnahmebehandlung deaktiviert
    
    
      Die Ausnahmebehandlung kann als Ganzes abgeschaltet werden.
    
   
  
    Precision Control Low Bit
      Precision Control High Bit
    
    
      Die aktuelle Rechengenauigkeit kann festgestellt oder geändert
      werden.  Sie kann einen der folgenden Werte annehmen.
 
      Single
      
      
        24 Bit
      
      Double
      
      
        53 Bit
      
      Extended
      
      
        64 Bit (Voreinstellung)
      
     
  
    Round Control Low Bit
      Round Control High Bit
    
    
      Next or even value
      
      
        Symmetrische Rundung / Bankers' Rounding (Voreinstellung)
      
      
        Werte werden zur nächstliegenden ganzen Zahl gerundet.
        Werte, welche genau auf der Hälfte zwischen zwei ganzen Zahlen liegen,
        werden zur nächsten geraden Zahl gerundet.
      
      Truncate
      
      
        Nachkommastellen abschneiden
      
      
        Das Rundungsergebnis wird durch Abschneiden der Nachkommastellen
        ermittelt.  Dies entspricht also der Rundung gegen
        Unendlich. 
      
      Positive infinity
      
      
        Rundung gegen +Unendlich
      
      
        Alle Werte werden zur nächsten größeren ganzen Zahl gerundet.
      
      Negative infinity
      
      
        Rundung gegen Unendlich
      
      
        Alle Werte werden zur nächsten kleineren ganzen Zahl gerundet.
      
      
        Asymmetrische Rundung / Kaufmännische Rundung
      
      
        Bei diesem Verfahren werden - wie bei der Symmetrischen Rundung - alle
        Werte zur nächstliegenden ganzen Zahl gerundet.
        Werte, welche genau auf der Hälfte zwischen zwei ganzen Zahlen liegen,
        werden allerdings immer zur nächsten 
größeren Zahl
        gerundet.
        Die FPU stellt kein Verfahren zur Asymmetrischen Rundung bereit.
        Die folgende Routine rundet asymmetrisch und wird nicht von der
        Einstellung des Steuerwortregisters beeinflusst.
        
//------------------------------------------------------------------------------
function RoundJustified(aValue: Extended): integer;
begin
  Result := Trunc( aValue ) + Trunc( 2 * Frac( aValue ) );
  if ( aValue < 0 ) then
  // Negative values...
    if ( ( Frac( aValue ) * 1000000000 ) = -500000000 ) then
    // Justify...
      Inc( Result );
end; // RoundJustified
       
   
  
    Infinity Control
       
     
    
      Affine model
      
      
        Die Zahlen liegen auf einem Strahl von Unendlich bis
         +Unendlich.
      
      Projective model
      
      
        Die Zahlen liegen auf einem Kreis, wobei Unendlich gleich
         +Unendlich ist.