AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler bei extended-Variablen

Ein Thema von ECHTERNMM · begonnen am 29. Sep 2004 · letzter Beitrag vom 2. Okt 2004
Antwort Antwort
ECHTERNMM

Registriert seit: 29. Sep 2004
Ort: Jena
5 Beiträge
 
Delphi 11 Alexandria
 
#1

Fehler bei extended-Variablen

  Alt 29. Sep 2004, 18:06
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
Angehängte Dateien
Dateityp: zip in64ex.zip (332,4 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Fehler bei extended-Variablen

  Alt 29. Sep 2004, 18:10
http://www.delphipraxis.net/internal...ct.php?t=34532
26. Beitrag von oben

Wird vermutlich an variierendem Umgang bei den Umrechnungen bei den verschiedenen CPUs liegen.


öööhm, und
Herzlich wilkommen in der DP
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Fehler bei extended-Variablen

  Alt 29. Sep 2004, 18:11
In der OH steht, Extended sei Plattformabhängig, vielleicht ist es das.
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Fehler bei extended-Variablen

  Alt 29. Sep 2004, 18:12
Zitat von Dax:
Plattforumabhängig
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
ECHTERNMM

Registriert seit: 29. Sep 2004
Ort: Jena
5 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Fehler bei extended-Variablen

  Alt 1. Okt 2004, 15:40
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 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
  Mit Zitat antworten Zitat
ECHTERNMM

Registriert seit: 29. Sep 2004
Ort: Jena
5 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehler bei extended-Variablen

  Alt 2. Okt 2004, 01:54
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz