Prüfen ob eine Zahl ein Integer ist

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Prüfen ob eine Zahl ein Integer ist

BeitragDi, Aug 24, 2010 16:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute.

Mir ist die Tage die Idee für ein kleines Programm gekommen, an das ich mich gleich mal setzen wollte.
Leider bin ich auf ein kleines Problem gestoßen: Wenn man einen Integer durch einen Integer teilt, ist es dann möglich, herauszufinden, ob das Ergebnis glatt geteilt ist oder ob es gerundet werden musste um wieder ein Integer zu sein?

Also, ich möchte von dem Programm wissen, ob die Rechnung 15/3 glatt aufging oder nicht (ja ich weiß, das tut sie) bzw ich möchte wissen, ob bei der Rechnung 15/2 ein glattes Ergebnis oder eben 7,5 rauskommt, da der PC das nur als 8 ausgibt.

Wäre super, wenn man das irgendwie überprüfen könnte und mir da einer weiterhelfen könnte.

Lg, M0rgenstern

Holzchopf

Meisterpacker

BeitragDi, Aug 24, 2010 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Mod (Gibts auch in BMax)
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

M0rgenstern

BeitragDi, Aug 24, 2010 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man.

Das ist jetzt schon dämlich.
Dankeschön, daran hab ich gar nicht gedacht.


Vielen Danke.

Lg, M0rgenstern

SpionAtom

BeitragDi, Aug 24, 2010 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei Mathe-Lern-Programmen kann man auch den anderen Weg gehen.
Man würfelt sich zwei Faktoren aus x und y, berechnet das Ergebnis e = x * y, und stellt die Aufgabe
e / y = ?
So ist sichergestellt, dass die Aufgabe glatt aufgeht.

Vielleicht lässt sich das ja auf dein Problem übertragen.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

M0rgenstern

BeitragDi, Aug 24, 2010 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, lässt es sich nicht, aber vielen Dank.

Das wäre nämlich viel zu kompliziert für das was ich probiere.
Ich wollte nämlich mal ausprobieren bis wie viele Stellen ich Primzahlen errechnen kann und wie lange das entsprechend dauert.

Btw: Wie groß darf ein Integer Array sein?

Lg, M0rgenstern

Xeres

Moderator

BeitragDi, Aug 24, 2010 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Mehr als 1GB wird keinem Programm zugestanden (man korrigiere mich wenn nötig, vll. auch 2GB), aber das wär' kein Grund es aus zu reizen... Wenn es nur darum geht eine Primzahlenliste zu generieren, würd' ich vorschlagen, gleich in eine Textdatei zu schreiben.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

M0rgenstern

BeitragDi, Aug 24, 2010 18:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm.
Stimmt.
Das wäre die bessere Idee.
Okay, dann was anderes. Wie groß darf ein INteger werden?
100 leider auf keinen Fall.

Btw, gibts ne Möglichkeit, mit größeren Zahlen zu rechnen als ein Integer erlaubt?

Lg, M0rgenstern

Xeres

Moderator

BeitragDi, Aug 24, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Integer hat 32 Bit, einer geht für das Vorzeichen drauf, also max +(2^31)-1.
Mit Long hast du 64 Bit, also max +(2^63)-1.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mpmxyz

BeitragDi, Aug 24, 2010 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Long?

Die gehen von -2^63 bis +2^63-1.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

M0rgenstern

BeitragDi, Aug 24, 2010 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey vielen Dank.

Long hilft schon weiter....
Aber, wenn ich noch größere Zahlen haben will.... geht das?

Lg, M0rgenstern

EDIT: 2^63?
Das wären 9223372036854775808
Aber irgendwie lande ich im negativen^^
Hab ich euch falsch verstanden?

Lg, m0rgenstern

Thunder

BeitragMi, Aug 25, 2010 9:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Klar doch. Das Maximum ist 2^63-1. Trotzdem bekomme ich mit dem ^-Operator einen negativen Wert - woran das liegt weiß ich nicht, aber ich habe das so getestet:
BlitzMax: [AUSKLAPPEN]
Local i:Long=pow(2,63)-1
Local j:Long=2^63-1
Print i
Print j

Function pow:Long(x%,y%)
Local r:Long=1
For y=y To 1 Step -1
r:*x
Next
Return r
EndFunction


Größere Zahlen bekommst du afaik am einfachsten mit einem Stringrechner. Das wird allerdings schon sehr langsam.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Xeres

Moderator

BeitragMi, Aug 25, 2010 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Interessant. In einer Rutsch geht's nicht, aber in zwei Schritten schon.
BlitzMax: [AUSKLAPPEN]
Local j:Long = (2 ^ 63) ; j:-1
Print j
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragMi, Aug 25, 2010 13:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Es reicht auch nach dem Potenzieren explizit nach Long zu casten:
BlitzMax: [AUSKLAPPEN]
Global i:Long=Long(2^63)-1
WriteStdout i


Der ^-Operator arbeitet anscheinend unter BlitzMax (bei Ganzzahlen) nur mit 32-Bit-Werten:
Code: [AUSKLAPPEN]
;Assemblercode der aus der Global-Deklaration generiert wurde:
_bb_i:
   dd   0,-2147483648

Das ist eine falsche Zahl: (-2147483648 << 32)+0 = -9223372036854775808

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group