Problem beim Rechnen mit DB2/Fehler in der POWER-F
- Dieses Thema hat 3 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 14 Jahre, 6 Monaten von
Anonym.
-
AuthorPosts
-
17. März 2009 um 16:22 Uhr #4026
AnonymInaktivund noch ne Frage …
ich möchte, dass mir DB2 den ganzzahligen Wert für
1764495367345990946 / 4294967296
zurück gibt. Tippe ich die Zahlen im QMF ein; kein Problem. Jetzt habe ich aber eine Funktion, die mir den ersten Wert als CHAR(20) zurück gibt. Ich bekomme aber den Wert auf Teufel komm raus nicht so formatiert, dass ich das gewünschte Ergebnis bekomme.
Wer kann mir da weiterhelfen?Bei den Spielereien mit den kleinen 😉 Zahlen ist mir auch aufgefallen, dass die POWER-Funktion für 256**7 ein falsches Ergebnis zurückgibt:
S ELECT DEC(POWER(256,0 , 7), 31) FROM SYSIBM.SYSDUMMY1 bringt 72057594037927900
wogegen
S ELECT 256,0 *256*256*256*256*256*256 FROM SYSIBM.SYSDUMMY1 das richtige Ergebnis 72057594037927936.0 bringt(nein, hat leider nichts mit meinem Gehalt zu tun)
Grüsse
Alexander
19. März 2009 um 9:03 Uhr #4197
AnonymInaktivS ELECT Â
DECIMAL(‚1764495367345990946 ‚,19) Â / 4294967296, Â Â
DECIMAL(‚ 1764495367345990946‘,19) Â / 4294967296, Â Â
1764495367345990946 Â / 4294967296 Â Â Â
FROM SYSIBM.SYSDUMMY1 Â ; Â Â Â Â Â Âbringt als Ergebnis:
      COL1         COL2         COL3
————— Â Â Â ————— Â Â Â —————
  410828592     410828592     410828592DECIMAL(20) ist hier als 1 Argument allerdings nicht mehr zulässig ( egal ob als DECIMAL(‚wert‘,20), oder als 20-stelliger numerischer Wert
Zur Spielerei:
Die Funktion POWER() gibt einen Wert vom Typ DOUBLE zurück und dessen Genauigkeit beträgt 15 signifikante Ziffern. Die spätere Umformung zum DECIMAL kann diese Genauigkeit nicht mehr erhöhen.
19. März 2009 um 9:22 Uhr #4325
AnonymInaktivMoin und danke!
gibts einen Grund dafür, dass ich nicht mit DEC(20) arbeiten kann?
bei meinen ganzen Versuchen habe ich auch gemerkt, dass mit einer Cast-Umwandlung auf REAL auch ein falsches Ergebnis kommt 🙁
@Ulrich, hast Du das POWER nachvollziehen können? Oder gibts da ggfs. ein Patch für?
Alexander
19. März 2009 um 12:15 Uhr #4417
AnonymInaktivgibts einen Grund dafür, dass ich nicht mit DEC(20) arbeiten kann?
Da überschreitest Du wohl bei internen Zwischenergebnissen die erlaubte maximale Genauigkeit.
Wie intern die Genauigkeit ( scale + precision ) berechnet wird, steht in der SQL-Reference.http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnsqj16/2.21.2.3?SHELF=&DT=20080904091702&CASE=
@Ulrich, hast Du das POWER nachvollziehen können? Oder gibts da ggfs. ein Patch für?
Power() hat als Ergebnistyp FLOAT.  Diese Gleitkommadarstellung ist für grosse Wertebereiche, aber nicht für grosse Genauigkeit gedacht. Kurz: Works as designed
http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnsqj16/3.2.82?DT=20080904091702
-
AuthorPosts
You must be logged in to reply to this topic.