Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Extended mit mehr als 18 Stellen (https://www.delphipraxis.net/56126-extended-mit-mehr-als-18-stellen.html)

blackfoxx 1. Nov 2005 10:59


Extended mit mehr als 18 Stellen
 
Hi Leutz,
Ich möchte einen Extended Wert mit FloatTostrF in eine reine Zahl Formatieren. Das funktioniert aber nur bis 18 Stellen. Was mache ich denn, wenn ich aber mehr als 18 als reine Zahl anzeigen möchte? :?:
Danke schonmal..

Greetz BlackFoXX

ripper8472 1. Nov 2005 11:03

Re: Extended mit mehr als 18 Stellen
 
mehr als 18 stellen wird ein extended eh nicht haben.

edit: ok, ich hab gegoogelt und extended soll etwa 19 stellen hinkriegen. mehr aber auch nicht.

edit:
http://www.guidogybels.net/index.html?floats.html
ein extended hat 64 bit genauigkeit (rest ist exponent) und damit 19.266 dezimalstellen genauigkeit

ichbins 1. Nov 2005 11:08

Re: Extended mit mehr als 18 Stellen
 
sonst musst du es eben selber schreiben...

Delphi-Quellcode:
function floattostr(x:extended;kommastellen:integer):string;
var
  b:extended;
  i:integer;
begin
  b:=x;
  if b<0 then begin
    b:=-b;
    result:='-';
  end else
    result:='';
  result:=result+inttostr(trunc(b))+',';
  b:=b-trunc(b);
  for i:=1 to kommastellen do begin
    b:=b*10;
    result:=result+inttostr(trunc(b));
    b:=b-trunc(b);
  end;
end;
(getestet+funktioniert)

für große Zahlen natürlich unbrauchbar, da die Funktion keine Schreibweise "17,793479823789e18" hinkriegt.

blackfoxx 1. Nov 2005 11:12

Re: Extended mit mehr als 18 Stellen
 
Laut Delphi Hilfe ist der maximale Wert von Extended 1.1*10^4932 bei 8 Byte Größe und 1920 signifikanten Stellen.
Es sind also weitaus mehr als 18 Stellen oder? :gruebel:
Nur wie bekomme ich die in meinen String?

ichbins 1. Nov 2005 11:14

Re: Extended mit mehr als 18 Stellen
 
ich hab dir gerade oben eine Funktion hingeschrieben. Die geht auch. Aber ein Extended-Wert hat 10 Byte, da passen niemals 1920 Signifikante Stellen rein.

Delphi-Quellcode:
function floattostr(x:extended;kommastellen:integer):string;
var
  b:extended;
  i:integer;
begin
  b:=x;
  if b<0 then begin
    b:=-b;
    result:='-';
  end else
    result:='';
  result:=result+inttostr(trunc(b))+',';
  b:=b-trunc(b);
  for i:=1 to kommastellen do begin
    b:=b*10;
    result:=result+inttostr(trunc(b));
    b:=b-trunc(b);
  end;
end;
wenn du z.B. Pi auf 10^20 Stellen genau berechnen willst, kommst du eben nicht drumrum einen neuen Typ zu schreiben oder so.

blackfoxx 1. Nov 2005 11:23

Re: Extended mit mehr als 18 Stellen
 
naja..
Stand eben in der Hilfe. Ich werd mal den Code testen. Danke.

Greetz BF

ripper8472 1. Nov 2005 11:25

Re: Extended mit mehr als 18 Stellen
 
das heisst nicht "1920" sondern "19-20"...

ichbins 1. Nov 2005 11:26

Re: Extended mit mehr als 18 Stellen
 
ja, so klingt es auch sinnvoller... :mrgreen:

Khabarakh 1. Nov 2005 11:27

Re: Extended mit mehr als 18 Stellen
 
Zitat:

Zitat von blackfoxx
Laut Delphi Hilfe ist der maximale Wert von Extended 1.1*10^4932 bei 8 Byte Größe und 1920 signifikanten Stellen.
Es sind also weitaus mehr als 18 Stellen oder? :gruebel:
Nur wie bekomme ich die in meinen String?

Das ist ein Schreibfehler in der D2005-OH. Es sollte "19 - 20" heißen :wink: .

Für (theoretisch) unbegrenzt viele Nachkommastellen gibt's den genialen IInteger von Hagen: http://www.delphipraxis.net/internal...=106306#106306

[edit]Zu langsam :stupid: ... [/edit]

3_of_8 1. Nov 2005 11:28

Re: Extended mit mehr als 18 Stellen
 
Kurze Zwischenfrage eines Dummen: Wie schreibt man einen neuen Typ? Also wie man Typen deklariert ist mir klar, aber wie kann ich einen neuen Zahlentyp deklarieren? Muss ich da mit Assembler arbeiten?

ripper8472 1. Nov 2005 11:29

Re: Extended mit mehr als 18 Stellen
 
klassen schreiben und operatoren ueberladen reicht schon.

Flocke 1. Nov 2005 11:29

Re: Extended mit mehr als 18 Stellen
 
Ich habe auch gerade mal in der Delphi-Hilfe nachgeschlagen - ich denke mal, denen ist der Dezimalpunkt abhanden gekommen :roll:

Es sollte sein: 64 Bits geben log10(2^64) = 19,27 signifikante Stellen.

3_of_8 1. Nov 2005 11:30

Re: Extended mit mehr als 18 Stellen
 
Äh, ja. Beispiel?

Also einfache Records und Typen, Klassen etc. habe ich ja schon geschrieben, aber einen Zahlentyp, mit dem man rechnen kann?

Khabarakh 1. Nov 2005 11:30

Re: Extended mit mehr als 18 Stellen
 
Zitat:

Zitat von 3_of_8
Kurze Zwischenfrage eines Dummen: Wie schreibt man einen neuen Typ?

Einen einfachen Typen? Gar nicht. Das geht nur über Klassen/Interfaces.

ripper8472 1. Nov 2005 11:31

Re: Extended mit mehr als 18 Stellen
 
oder auch etwas anders geschrieben: 64 * ln(2) / ln(10)

ichbins 1. Nov 2005 11:31

Re: Extended mit mehr als 18 Stellen
 
langsamheit macht nix, so was hab ich schon immer gesucht !!! :bounce1: :-D :-D :-D :-D

zum Thema wie schreibt man eine Typ? Seeeeeeeehr kompliziert. In Type einen Typ deklarieren:

Delphi-Quellcode:
type
  tzahl=class
    protected
      {Versteckte Variablen / Funktionen / Prozeduren / Propertys}
      x:integer;
      function getwertvonx:integer;
      procedure setx(setxto:integer);
    public
      {In anderen Units sichtbare Variablen/Fs/Ps/props}
      property wertvonx read getwertvonx write setx;
  end;

  [...]

procedure tzahl.setx(setxto:integer);
begin
  x:=setxto;
  //Aktion wenn X geschrieben wird (labels verändern etc)
end;  

function tzahl.getwertvonx:integer;
begin
  result:=x;
  //Aktion wenn x ausgelesen wird
end;

3_of_8 1. Nov 2005 11:32

Re: Extended mit mehr als 18 Stellen
 
OK, ich gebs auf. Bin halt noch ein Newbie.

ichbins 1. Nov 2005 11:35

Re: Extended mit mehr als 18 Stellen
 
Gib niemals auf!!!

Aufgeben hat keinen Sinn. Besser ein Tutorial durchlesen und du weisst absofort, wie man Typen schreibt.

manchmal sogar mehr von nutzen als aufzugeben.

3_of_8 1. Nov 2005 11:37

Re: Extended mit mehr als 18 Stellen
 
Naja, eigentlich muss es ja nicht sein. Ich brauche es momentan nicht und versuche mich besser wieder an OpenGL und meinen zig unbeendeten Projekten.

Welches tutorial eigentlich?

ichbins 1. Nov 2005 11:38

Re: Extended mit mehr als 18 Stellen
 
Eines von 10000000000000 Tutorials die du überall in Google verstreut und vielleicht auch sogar in der DP findest. Ich hab selber mal so eins geschrieben, aber das find ich gerade nicht :oops: Erst gestern oder vorgestern hat Luckie hier eins gepostet...

Khabarakh 1. Nov 2005 11:43

Re: Extended mit mehr als 18 Stellen
 
Um was geht es überhaupt :stupid: ? Um OOP, oder wie man eine zweite DECMath-Unit schreibt :stupid: ² ?

3_of_8 1. Nov 2005 11:44

Re: Extended mit mehr als 18 Stellen
 
Achso. Danke. Ich dachte, du meinst ein bestimmtes.

Och nee, jetzt ham wir den ganzen schönen Thread vollgespamt. :wall:

ichbins 1. Nov 2005 11:53

Re: Extended mit mehr als 18 Stellen
 
@khabarakh: äh... irgendwie beides, vielleicht auch garnix davon... :)
@3/8: macht nigs, wozu sind die Threads denn sonst da? :)

3_of_8 1. Nov 2005 12:04

Re: Extended mit mehr als 18 Stellen
 
Die Mods sagen immer "höchstens eine Frage pro Thread". Mit ein Grund für die Revolution.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz