Was ist das für eine Zahlendarstellung?

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » Sa Jan 07, 2012 8:18 pm

Ich habe in Dedupe einen fiesen Bug entdeckt. In der Datenbank werden die Hashwerte teilweise in dieser Form gespeichert:
1.11867966967434e+19
Ist das Expondentialdarstellung? Diese Art von Mathematik hatte ich nie. Aber ich brauche eine Möglichkeit das ganze in Normaldarstellung in ein unsigned long long zu speichern. Davon hängt es ab, ob die Duplikate auch gefunden werden. Bisher habe ich einfach die Sql Strings per Stringstream zurückgelesen, aber das klappt nicht, wenn die Zahl so dargestellt wird. Jemand eine Idee?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Was ist das für eine Zahlendarstellung?

Beitrag von cloidnerux » Sa Jan 07, 2012 8:24 pm

Ist das Expondentialdarstellung?
Schon. Aber das zeigt ein Problem mit dem Datenbanktyp zu sein. Welchen typ hat das entsprechende Feld?
Vlt den typ auf string setzten und halt die uint64 hin und her konvertieren.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » Sa Jan 07, 2012 8:30 pm

*stirnklatsch* Du bist ein Genie :D Aber da hätte ich auch selber drauf kommen können...
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » Sa Jan 07, 2012 8:40 pm

Mhh euphorisch ist wieder verflogen. Jetzt wird alles als String gespeichert, der Fehler ist immer noch gleich :( Das heißt weitersuchen.

Edit: Jetzt hab ich es. Wenn man alle Werte auch konsequent als String in die Datenbank speichert, dann klappt es. Danke für die Hilfe, war der Wink in die richtige Richtung.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Xin » So Jan 08, 2012 12:19 pm

Was ist "Normaldarstellung"?

Und wie erzeugst Du aus dem uint64 eine Exponentialdarstellung?
Ein uint64 sollte natürlich auch als uint64 gespeichert werden!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » So Jan 08, 2012 6:58 pm

Normaldarstellung ist für mich die am weitesten verbreitete Art Zahlen darzustellen: Eine Zahl im Zehnerzahlensystem, so lesbar, wie es jeder Grundschüler in der Schule lernt. Wie das jetzt exakt heißt weiß ich nicht. Ich bin ja verstanden worden :P

Ich erzeuge die Expontialdarstellung gar nicht, das macht Sqlite intern. Zahl wird als SQL Statement und damit als String in ein 64 bit Zahlenfeld der Datenbank geschrieben. Ab einer bestimmten Anzahl Stellen wechselt Sqlite auf diese Darstellung. Um genau feststellen zu können welcher Datentyp in der Datenbank lauert, ist Sqlite zu beschränkt, ich kann nur abfragen ob das ein Int, Double, String oder Binär ist. Also habe ich alle Datenfelder auf String umgestellt, lese über einen Stringstream das SQL Statement zusammen und speichere alles als String. Beim Auslesen weiß ich welche Felder in welchen Zieltyp konvertiert müssen, kann das wieder per Stringstream erledigen und habe sicher die richtigen Daten in der richtigen Darstellung am richtigen Ort. Mit dieser Lösung bin ich sehr zufrieden, sie ist einfach und sie funktioniert
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Xin » So Jan 08, 2012 9:06 pm

Bebu hat geschrieben:Normaldarstellung ist für mich die am weitesten verbreitete Art Zahlen darzustellen: Eine Zahl im Zehnerzahlensystem, so lesbar, wie es jeder Grundschüler in der Schule lernt. Wie das jetzt exakt heißt weiß ich nicht. Ich bin ja verstanden worden :P
Zehnerzahlensystem => Dezimaldarstellung. :)
Bebu hat geschrieben:Ich erzeuge die Expontialdarstellung gar nicht, das macht Sqlite intern.
Dann bilde die Zahl im String Hexadezimal ab. Die Exponentialdarstellung kürzt unter Umständen, bzw. die Darstellung ist evtl. nicht 1:1 zurück zu rechnen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » So Jan 08, 2012 9:53 pm

Auch eine Möglichkeit. Aber das Problem trat auch nur auf, wenn ich die Zahl in ein Zahlenfeld habe schreiben lassen. Jetzt schreibe ich die Dezimaldarstellung in ein Stringfeld. Damit funktioniert auch die Rückholung wieder wie gewünscht, schließlich bekomme ich den String von Sqlite auch 1:1 wieder so zurück.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Xin » Mo Jan 09, 2012 12:13 am

Bebu hat geschrieben:Auch eine Möglichkeit. Aber das Problem trat auch nur auf, wenn ich die Zahl in ein Zahlenfeld habe schreiben lassen. Jetzt schreibe ich die Dezimaldarstellung in ein Stringfeld. Damit funktioniert auch die Rückholung wieder wie gewünscht, schließlich bekomme ich den String von Sqlite auch 1:1 wieder so zurück.
Nicht Sqlite ist hier das Problem, sondern, dass ein Integer in eine nicht zwangsläufig gleichwertige Darstellung konvertiert wird und diese nicht gleichwertige Darstellung bei der Rückkonvertierung eventuell zu einer anderen Integer führt.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Was ist das für eine Zahlendarstellung?

Beitrag von Bebu » Mo Jan 09, 2012 12:05 pm

Ja, aber diese Problem umgehe ich, indem ich die Darstellung als String speichere.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Antworten