AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Rechenprogramm
Thema durchsuchen
Ansicht
Themen-Optionen

Rechenprogramm

Ein Thema von Amateurprofi · begonnen am 31. Mai 2009 · letzter Beitrag vom 7. Okt 2020
 
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.098 Beiträge
 
Delphi XE2 Professional
 
#23

AW: Rechenprogramm

  Alt 26. Sep 2020, 23:44
Hallo Profi
Wichtigere Frage... Wieso kann ich mit deinem Rechner "nur" bis 1754! rechnen?
Gruss
M
Hab ich mit PN beantwortet, hier noch mal für andere.

Das Maximum 1754 für N! (im Normal-Modus) resultiert aus dem größten in einem Extended darstellbaren Wert (1.1E+4932).
1755! ergäbe 3.473E+4933 und würde den Maximalwert überschreiten.

Übrigens:
Im Normal-Modus werden in meinem Programm alle Werte in Extended-Variablen gespeichert, was auch der Grund ist, warum es keine 64Bit Version gibt (Da ist Extended = Double).

Tatsächlich rechne ich N! mit der FPU. Hier der Code
Delphi-Quellcode:
PROCEDURE MonOpFacul(var V:TValue);
asm // EAX=@TValue
// CheckMinMax(v.v,0,1754,pact,116);
// n:=Trunc(v.v);
// v.v:=1;
// while n>1 do begin
// v.v:=v.v*n;
// dec(n);
// end;
          // ASM Version braucht 1/6 der Zeit und ist kürzer, auch wenns
          // nicht so aussieht.
                   mov byte [eax].TValue.Vt,vtNone
                   fld tbyte[eax].TValue.V
                   fldz
                   fcomip st,st(1)
                   ja @Err
                   fild dword [@1754]
                   fcomip st,st(1)
                   jae @Ok
 @Err: mov eax,117
                   mov edx,pact
                   jmp ASMError1
 @1754: dd 1754
 @Ok: sub esp,8
                   fnstcw word [esp+4]
                   fnstcw word [esp+6]
                   fwait
                   or word [ESP+4], $0F00 // trunc toward zero, full precision
                   fldcw word [ESP+4]
                   fistp dword [esp]
                   fwait
                   fldcw word [esp+6]
                   fld1
                   mov edx,[esp]
                   sub edx,1
                   jbe @Fin
 @Loop: fimul dword [esp]
                   mov [esp],edx
                   sub edx,1
                   ja @Loop
 @Fin: fstp tbyte[eax].TValue.V
                   add esp,8
end;
Delphi-Quellcode:
   // Vom Parser benutzter Werte-Record
    // CanDeformat : Info, ob der von NumStr erzeugte Ausgabe-String
    // wieder deformatiert werden kann
    // Vt : Wofür der Wert steht
    // V : Der numerische Wert
    // Numerator : Zähler, wenn Vt=vtFraction
    // Denominator : Nenner, wenn Vt=vtFraction
    // Latitude : Breitengrad, wenn Vt=vtGeoPos
    // Longitude : Längengrad, wenn Vt=vtGeoPos
    // ClrVal : Fabbdaten, wenn Vt=vtColor
    TValue=packed Record
       CanDeformat:Boolean;
       Vt:TValueType;
       V:Extended;
       case Integer of
          1 : (Numerator:Extended;
                 Denominator:Extended);
          2 : (Latitude:Extended;
                 Longitude:Extended);
          3 : (LatLon:Array[Boolean] of Extended);
          4 : (ClrVal:TColorValue);
    end;
  // Wofür ein Wert steht (vtNone=einfache Zahl)
    TValueType=(vtNone,vtBool,vtColor,vtFraction,
                vtSeconds,vtMinutes,vtHours,vtDays,vtWeeks,vtMonths,vtYears,
                vtTime,vtDate,vtDateTime,
                vtGeoPos);
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz