![]() |
Fehler bei extended-Variablen
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
auf bestimmten Rechnern wird die einer extended-Variablen zugewiesene Zahl 123451234512345123 durch VAL -> STR in 123451234512345114 umgewandelt. Ich habe zur Illustration ein Codebeispiel beigefügt. Es ist mir Delphi 6 Pro UP2 Build 6.240 mit den RTL-Updates 1, 2 und 3 übersetzt. Wie gesagt: auf manchen Rechnern tritt der Effekt nicht auf. Es scheint aber nicht am System selbst zu liegen, da es Rechner mit Win2000Pro SP4 gibt, auf denen der Effekt auftritt und solche -ebenfalls Win2000ProSP4- bei denen er nicht auftritt. Es gibt WinXP SP1 Rechner ohne Effekt - ob mit Effekt konnte ich noch nicht feststellen. Mit Delphi 1 tritt der Effekt übrigens auch auf "schlechten" Rechnern nicht auf! (siehe Unterverzeichnis 16). Bin etwas ratlos: woran mag das liegen?? Gruß nmm |
Re: Fehler bei extended-Variablen
![]() 26. Beitrag von oben ;) Wird vermutlich an variierendem Umgang bei den Umrechnungen bei den verschiedenen CPUs liegen. öööhm, und :dp: Herzlich wilkommen in der DP :dp: |
Re: Fehler bei extended-Variablen
In der OH steht, Extended sei Plattformabhängig, vielleicht ist es das.
|
Re: Fehler bei extended-Variablen
Zitat:
|
Re: Fehler bei extended-Variablen
Hi,
zunächst Danke für die Hinweise. Aber das Problem hat nichts mit den üblichen Flouting-point Fehlern zu tun. Auch mit der Plattform hat es nichts zu tun: ich sagt ja bereits, daß sich ein und dieselbe EXE-Datei auf verschiedenen Win2000Pro SP4 Rechner unterschiedlich verhält-die "Plattform" ist j :warn: :warn: a dann wohl dieselbe... Ich habe einen reproduzierbaren Anhaltspunkt für das oben beschriebene Verhalten ausfindig gemacht: Immer wenn das Programm i64ext.exe die Datei msvcrt.dll läd, kommte zu der fehlerhaften Berechnung. Das Progrqamm i63ext.exe läd die DLL natürlich nicht explizit, aber anscheinend gibt es hook-DLL's, die nach einem mir nicht bekannten Verfahren hinzugeladen werden. Diese laden dann msvcrt.dll nach. Beispiel: winvnc oder CTHELPER (Ein Programm von Creative Technology Ltd, das irgendwie zu den Soundblaster-Treibern gehört). Folgendes ist reproduzierbar: Auf Rechner A läuft der VNC-Server, auf Rechner B der VNC-viewer. Sind die Rechner nicht verbunden, funktioniert i63ext.exe auf Rechner A. Verbindet man sich von B aus mit A, dann zeigt das Programm diesen Unsinn 123451234512345114 statt 123451234512345123) an. Kappt man die Verbindung und startet das Programm auf A neu, so ist wieder alles OK. Ich habe mit dem schönen Programm Process Explorer 8.2 von sysinternals jeweils nachgesehen, welche DLL's das Programm geladen hatte. Immer wenn msvcrt.dll geladen ist, funktioniert VAL->STR nur mit 16-stelliger Genauigkeit, ist es nicht geladen, ist alles OK. Ahso: Ab und B sind beides Win2000Pro SP4 Rechner. Die Version von MSVCRT.DLL ist (auf beiden Rechnern) 6.01.9844.0000. Fällt jemandem etwas dazu ein?? Gruß nmm |
Re: Fehler bei extended-Variablen
Hi, ich weiß jetzt, was es war/ist:
Es ist ein Bug in msvcrt.dll. Diese DLL (in älteren Versionen <7.x) schaltet automatisch die FPU in den 64-Bit flotingpoint-Mode. In Delphi kann man das rückgängig machen mittels SetPrecisionMode(pmExtended); (unit math). Unter XP besteht der Bug nicht mher. Gruß nmm |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz