Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi integer und int64 Rechnungen (https://www.delphipraxis.net/112044-integer-und-int64-rechnungen.html)

-=Breeze=- 14. Apr 2008 11:46


integer und int64 Rechnungen
 
Hallo zusammen, :hi:
ich habe ein Problem bei der Benutzung von int64 :wall:

Gegeben sei eine integer und eine int64 Variable:

Code:
var x : integer;
    y : int64;
begin
   x:=122;
   y:=x*x*x*x*x*x*x*x*x*x*x*x*x*x;
   Edit1.Text:=IntToStr(y);
end;
Obwohl y eine int64 ist liefert delphi mir einen negativen Wert (-1841414144).

Auch
Code:
   y:=int64(x*x*x*x*x*x*x*x*x*x*x*x*x*x);
liefert dasselbe Ergebnis. :twisted:

Ich hoffe mir kann jemand helfen. :lol: :lol:

sirius 14. Apr 2008 11:50

Re: integer und int64 Rechnungen
 
y:=x*x*x*x*x*x*x*x*x*x*x*x*x*int64(x);

Edit:
122^13 ist doch viel größer als 2^64

Klaus01 14. Apr 2008 11:52

Re: integer und int64 Rechnungen
 
122^14= 161.822.024.226.591.835.670.322.233.344
und übersteigt leicht den positiven Bereich von int64

Grüße
Klaus

soulies 14. Apr 2008 11:56

Re: integer und int64 Rechnungen
 
hoi,

mach doch folg. wenns nur ums anzeigen geht

Delphi-Quellcode:
var
   x : integer ;
   y : extended ;
begin
     x := 122 ;
     y := power(x,13);
     ... := format('%f',[y]);
end;

cya

Muetze1 14. Apr 2008 11:58

Re: integer und int64 Rechnungen
 
Trotz der Lösung noch eine Anmerkung:

Zitat:

Zitat von -=Breeze=-
Code:
var x : integer;
    y : int64;
begin
   x:=122;
   y:=x*x*x*x*x*x*x*x*x*x*x*x*x*x;
   Edit1.Text:=IntToStr(y);
end;

Der erste Operand ist immernoch ein Integer, somit rechnet er mit 32 Bit.

Zitat:

Zitat von -=Breeze=-
Code:
   y:=int64(x*x*x*x*x*x*x*x*x*x*x*x*x*x);

Auch hier ist der erste Operand immernoch 32 Bit, somit rechnet er das ganze immernoch mit 32 Bit Arithmetik. Da lohnt es sich dann auch nicht mehr, das Endergebnis zu casten, das ist dann schon versaut.[/quote]

-=Breeze=- 14. Apr 2008 12:00

Re: integer und int64 Rechnungen
 
Vielen Dank für die schnellen Antworten, da habe ich mich wohl vertan.

@soulies:
Zitat:

Undefinierter Bezeichner 'power'.

Nehmen wir an ich möchte herausfinden, wie ich die Zahlen von 97 bis 122 malnehmen muss, um 1489050905472 herauszubekommen.
Wenn ich Muetze1 da richtig verstanden habe, muss ich dafür Schleifen mit int64 Zahlen nehmen, oder?
Das geht aber nicht weil sie nicht ordinal sind... :twisted: :twisted:

Jemand eine Idee?

Muetze1 14. Apr 2008 12:02

Re: integer und int64 Rechnungen
 
Zitat:

Zitat von -=Breeze=-
Wenn ich Muetze1 da richtig verstanden habe, muss ich dafür Schleifen mit int64 Zahlen nehmen, oder?

Nein, es reicht den ersten Operanden entsprechend als Int64 zu casten:

Delphi-Quellcode:
y := int64(x)*x*x*x*x*x*x*x*x*x*x*x*x*x;
Zitat:

Zitat von -=Breeze=-
Das geht aber nicht weil sie nicht ordinal sind... :twisted: :twisted:

Seit wann denn dies?

-=Breeze=- 14. Apr 2008 12:06

Re: integer und int64 Rechnungen
 
Seitdem Delphi das mir gesagt hat :gruebel:
Zitat:

FOR-Schleifenvariable muß von ordinalen Typ sein
Anscheinend verstehe ich noch nicht so ganz, ich poste einfach mal meinen Code, vllt seht ihr dann was ich meine :zwinker:

Delphi-Quellcode:
for a:=97 to 122 do
      for b:=97 to 122 do
          for c:=97 to 122 do
              for d:=97 to 122 do
                  if a*b*c*d= <irgendeinezahl> then <Aktion>
//Edit: Ich habe aber nicht nur 4 Schleifen sonder 8-10.

soulies 14. Apr 2008 12:10

Re: integer und int64 Rechnungen
 
Zitat:

@soulies:
Zitat:
Undefinierter Bezeichner 'power'.
Delphi-Quellcode:
 uses math

hoika 14. Apr 2008 12:14

Re: integer und int64 Rechnungen
 
Hallo,


Delphi-Quellcode:
if Int64(a)*Int64(b)*Int64(c)*Int64(d)= <irgendeinezahl>

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 1 von 2  1 2      

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