• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

seltsame quersumme

Gavriel

Geocacher
Warum ist eigentlich die Länge für die Zahlen begrenzt, aus denen Quersummen richtig gebildet werden?
Beispiel: sowohl am Stand-PC als auch unter Linux erhalte ich mit q(10052003) als Ergebnis 1, was natürlich falsch ist. Weglöschen einer Null führt auf einmal zum gewünschten Ergebnis
 

salzkammergut

Geomaster
Also bei mir (static-linked-exe) funktioniert es richtig. Intern rechnet der Solver mit double, also ungefähr 16 signifikanten Stellen. Daher sollte eine "kleine" Zahl wie von Dir genannt kein Problem darstellen. Kann jemand anderer das Problem nachstellen?

Gruß
salzkammergut
 

Kappler

Geowizard
Win-exe funktioniert, aber wenn ich CW direkt aus Eclipse starte, erhalte ich auch 1 als Ergebnis :schockiert:
 

Engywuck

Geowizard
Ohne jetzt Zeit für eine Lösung zu haben: Das Problem liegt darin, dass in Parser.popCalcStackAsString die übergebene Double-Zahl per toString in einen String konvertiert wird. Und das erzeugt bei größeren Zahlen die Exponentialdarstellung, die natürlich immer mit 1 anfängt. Und da der Quersummenrechner immer beim ersten nicht-numerischen Zeichen aufhört, ist der Punkt nach der 1 schon der Abbruch. Da Parser.popCalcStackAsString diverserverweise genutzt wird, sollte man mit Kenntnis und Umsicht (skg?) die Änderung durchführen.

An der Stelle noch ein Vorschlag zur Erweiterung: Es werden manchmal auch Quersummen von längeren Zahlen erwartet, oder auch Quersummen von Zahlen mit Zeichen dazwischen (Telefonnummern, Geburtstage...) Vielleicht sollte man die Funktion auch mit einem Stringwertigen Argument zur Verfügung stellen, was dann einfach alles in die Quersumme mit einbezieht, was nach Zahl riecht. Dann ginge auch
Code:
q("24.12.2008")


Engywuck
 

MiK

Geoguru
Engywuck schrieb:
An der Stelle noch ein Vorschlag zur Erweiterung: Es werden manchmal auch Quersummen von längeren Zahlen erwartet, oder auch Quersummen von Zahlen mit Zeichen dazwischen (Telefonnummern, Geburtstage...) Vielleicht sollte man die Funktion auch mit einem Stringwertigen Argument zur Verfügung stellen, was dann einfach alles in die Quersumme mit einbezieht, was nach Zahl riecht. Dann ginge auch
Code:
q("24.12.2008")
Die Quersumme von einem String funktioniert schon. Das sollte dann auch mit fast beliebig langen Zahlen funktionieren. Allerdings wird noch bei der ersten Nicht-Ziffer abgebrochen. Das könnte man aber eigentlich ausbauen.
 

salzkammergut

Geomaster
Habe jetzt einen Fix eingecheckt, der auch bei größeren Zahlen die Quersumme richtig berechnet. Zusätzlich kann auch von Strings die Quersumme berechnet werden wobei alle Nicht-Ziffern ignoriert werden.

Bei Zahlen formatiert Java alles was größer als 1.0E7 ist in Exponentialschreibweise. Da ich zu wenig Zeit habe um eine komplett neue Formatierroutine zu entwickeln (die Quersummen bei Geocaches sind auch normalerweise nicht riesig), habe ich einen Kompromiss implementiert: Wenn die Zahl ganzzahlig ist und als Long darstellbar ist (also Absolutwert < 2^63-1), dann wird über den Umweg Long formatiert und es gibt keinen Exponenten. Also 15-stellige Zahlen sollten so problemlos funktionieren (denn bevor der Maximalwert der Longs erreicht wird, hat Double schon keine signifikanten Stellen mehr).

Im Zweifel die Zahl in Hochkommas einschliessen, dann funktioniert die Quersumme auch für beliebig grosse Zahlen.

salzkammergut
 
Oben