Wertebereiche vergrößern

Alles rund um die Programmierung mit Qt
Antworten
michai
Beiträge: 7
Registriert: 17. Mai 2010 12:40

Wertebereiche vergrößern

Beitrag von michai »

Hallo zusammen!

Ich habe gerade ein kleines Problem und weiß keine Lösung.

Ich benutze diverse Spinboxen, die Variableninhalte repräsentieren. Natürlich soll der Wertebereich der Spinbox auch den der Variablen wiederspiegeln. Jetzt habe ich aber festgestellt, dass selbst eine DoubleSpinBox nur von -(2^32)/2 bis (2^32)/2-1, also signed 32 Bit geht. Jetzt kann es aber theoretisch vorkommen, dass die Variablen auch U32 oder gar [SU]64 sind. Wie kann ich das denn darstellen?

(Qt 4.6, Windows XP 32Bit)

michai
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Einfach einen kleineren Bereich in der QSpinbox nehmen und dann selbst rechnen. 2 Millarden Spinnbox-Schrittchen machen nun wirklich keinen Sinn.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
michai
Beiträge: 7
Registriert: 17. Mai 2010 12:40

Beitrag von michai »

Christian81 hat geschrieben:Einfach einen kleineren Bereich in der QSpinbox nehmen und dann selbst rechnen. 2 Millarden Spinnbox-Schrittchen machen nun wirklich keinen Sinn.
Mir geht es nicht um die Schrittweite. Zumal ich ja vielleicht auch 2 Milliarden per Tastatur eingeben und dann +/- ein paar Schritte nachjustieren möchte.

Was ich meine ist der darstellbare Bereich bzw. die Werte, die ich per setMinimum() und setMaximum() festlegen kann.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nachdem hier 2^40 kein Problem sind, frag ich mich wie du auf diese Grenze kommst.
michai
Beiträge: 7
Registriert: 17. Mai 2010 12:40

Beitrag von michai »

upsala hat geschrieben:Nachdem hier 2^40 kein Problem sind, frag ich mich wie du auf diese Grenze kommst.
Wieso 2^40?

Folgendermaßen: Ich habe Code geschrieben, um z.B. das Maximum einer QSpinbox per setMaximum()-Methode in Abhängigkeit des Datentypes zu setzen (per switch... case). Also für U8 -> (2^8 )-1. Für S16 -> (2^16)/2-1. Usw.

Bis S32 ist auch noch alles gut, aber die Werte von U32, S64 und U64 waren nach (!) meinem setzen alle identisch mit denen vom S32. Und es ist kein Programmierfehler.

Die 64-Bitter sind eigentlich fast egal. Da kann ich auch drauf verzichten. Aber einen unsigned 32 würde ich schon gern korrekt darstellen.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Sorry, ich war irgendwie blind am Freitag... :(
Da hilft wohl nur ableiten von QAbstractspinbox und selbst machen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du hattest geschrieben, daß der Wertebereich nur bis ca. 2^32 geht, und deswegen habe ich mit einem höheren Wert getestet: 2^40.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

double hat doch eine Mantisse von 52 oder?
Also:

Code: Alles auswählen

int main(int argc, char *argv[])
{
  QApplication app(argc,argv);
  QDoubleSpinBox b;
  b.setMinimum(0);
  b.setMaximum(4503599627370495.0); // 2^52 - 1
  b.show();
  return app.exec();
}
Zugegeben:im Property-Editor meines Designers (auf diesem System Qt 4.5.3) kann ich allerdings das Maximum nicht über 2^31 - 1 setzen. Im Code wie oben geht's aber..

hth..
michai
Beiträge: 7
Registriert: 17. Mai 2010 12:40

Beitrag von michai »

mmm... *kopfkratz*
Jetzt fragt mich nicht warum, aber für U32 geht's tatsächlich mit der DoubleSpinbox. Hatte das eigentlich ausprobiert...
Vielleicht ist der Code übers Wochenende gereift. Wie ein guter Käse... :oops:

Danke euch trotzdem!
Antworten