Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > Paradox
Paradox Forum d'entraide sur Paradox, et sur Borland Database Engine
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2007, 12h11   #1
Invité de passage
 
Inscription : mai 2005
Messages : 11
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : mai 2005
Messages : 11
Points : 4
Points : 4
Par défaut Problème lors de l'utilisation de la fonction exp()

Bonjour,

comme l'indique le titre du sujet, j'ai des petits soucis (gros?) lors de l'utilisations des fonctions exp(), sqrt() ou pow()...

Je travail sous Paradox9 (pas le choix), avec les maj.

Voici le message d'erreur:

"An arithmetic error occured during 'SQRT' execution. Reason: 'The value of an argument is not in an acceptable range for this function"

Et mon petit bout de programme, permettant le calcul des valeurs nécessaires au traçage d'une courbe de gauss... (rien que ça)

--------------------------------------------------------------------------

method CourbeGauss (const TolHigh number,const TolLow number,
const Moyenne number, const EcartType number
,var Gauss TabCourbeGauss)

var
UniteGauss number
Puissance smallint
TailleGauss smallint

i smallint


Vt1,Vt2,Vt3 number
endvar


;remplissage des valeurs de la courbe de gauss

UniteGauss = (TolHigh - TolLow ) /120
Puissance = 2
TailleGauss = Gauss.size()



for i from 1 to TailleGauss

Vt1 = (TolLow + (i * (UniteGauss)) - Moyenne ) / (EcartType)

Vt2 = (1/(EcartType * sqrt( 2 * PI))) * exp( - (Vt1.pow(2))/2)

Vt3 = 100 * (Vt2 / (1/(EcartType * sqrt(2* PI))) )

if ( Vt3 > 100 ) OR ( Vt3 < -(0.0001) ) then

return

endif
gauss[TailleGauss-i+1] = smallint (Vt3)
endfor

endMethod

------------------------------------------------------------------------

J'ai lu sur un autre site que cela pouvait venir du trop grand nombre de chiffres après la virgule, que "exp()" n'accepterais pas.

J'ai donc tenté de troncaturer "Vt1", mais sans succés... (marche une fois sur deux).

Bref, j'ai retourné le problême dans tout les sens, recherché dans les docs... rien

Si quelqu'un aurait une idée, ou mieux qui aurait déjà eu ce problême, ce serait d'un grand secour pour moi!

Merci d'avance.
pillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2007, 17h43   #2
Membre chevronné
 
Inscription : mars 2006
Messages : 615
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 615
Points : 682
Points : 682
Ce petit exemple montre que la fonction exp n'est utilisable qu'entre +/-11355pour vt4 car le resultat est certainement de type Extended
3.6 x 10^-4951 .. 1.1 x 10^4932

Code :
1
2
3
4
5
6
7
8
9
10
 
var
  vt1,Vt4 number
endvar
	VT4 = 9000 
	while true 
	  vt1 = exp( vT4)
	  vt4 = vt4+ 1 
	  Message (Vt1)
	endwhile
En conséquence soit modifier la formule mathématique, soit faire un appel vers une DLL écrite par exemple en DELPHI
ALWEBER est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 07h44   #3
Invité de passage
 
Inscription : mai 2005
Messages : 11
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : mai 2005
Messages : 11
Points : 4
Points : 4
Merci beaucoup Alweber, je pense que je vais tenter la ddl en delphi (pour la formule mathématique, je laisse tombé).

Par contre je n'ai absolument aucune idée sur la marche à suivre. Je n'ai jamais créée de dll, et la je ne saurais vraiment pas quoi mettre dedans!

Quelqu'un peut-il m'expliquer le but de la maneuvre?
Utilisé la fonction "exp()" d'un autre language??

Merci d'avance.
pillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 20h45   #4
Membre chevronné
 
Inscription : mars 2006
Messages : 615
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 615
Points : 682
Points : 682
Est ce que tu as une version de delphi ?
ALWEBER est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 14h25   #5
Invité de passage
 
Inscription : mai 2005
Messages : 11
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Drôme (Rhône Alpes)

Informations forums :
Inscription : mai 2005
Messages : 11
Points : 4
Points : 4
Merci beaucoup Alweber, mais finalement je vais tester la valeure de Vt1 à chaque passage, et si elle s'avère trop importante, j'annulerais le traçage de la courbe.

De toute façon, la gaussiène dans ces cas là n'est pas très lisible.

Faute de temps, on va faire comme ça.

Encore merci!
pillou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2007, 15h05   #6
Membre chevronné
 
Inscription : mars 2006
Messages : 615
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 615
Points : 682
Points : 682
Sage solution !
ALWEBER est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h09.


 
 
 
 
Partenaires

Hébergement Web