maxioutils
Messages postés69Date d'inscriptionmardi 1 février 2005StatutMembreDernière intervention22 juin 2007 11 nov. 2005 à 16:13
Ah ok maisle problemec'est que avec mon truc c'est que j'ai 2 Edit.Text. Et un button1. Voila et moi je dois entrer la valeur dans edit1.text et la valeur converti doit sortir dans edit2.text entieremen. et quand jeemt que valeur:=edit1.text ilme dit que string et extended sont incompatible ça c'est normal alors je voudrai savoir comment faire maintenant emrci deton aide très sympa.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 11 nov. 2005 à 16:33
c'est normal puisque j'ai déclaré valeur en exentended et que text est un string il faut convertir la valeur en string.
pour passer d'une saisie dans l'edit1 à un affichage dans l'edit2
1 er cas si tu rentres 2356468744585 * 8487454 dans l'edit1 tu devras
passer par une fonction qui convertiras ta chaine (text de l'edit1) en
plusieurs termes puis calculera le resultat. (genre éditeur de
fonctions) et enfin le convertira en chaine pour l'afficher dans l'edit2
2ème cas (plus simple) tu fais un genre de calculette:
-saisie du 1er chiffre
-saisie de l'opérateur
-calcul du resulat
faafichage du résultat.
3eme cas l'edit1 contient le resulat de l'opération
il faut faire en decomposant c'est plus simple à comprendre:
valeur:= strtofloat(edit1.text);
puis convertir la valeur en chaine apres avoir reduit valeur à un entier
dans le cas de trunc ou de round la fonction renvoie un integer d'ou
l'utilisation de inttostr() qui converti un entier en chaine
maxioutils
Messages postés69Date d'inscriptionmardi 1 février 2005StatutMembreDernière intervention22 juin 2007 11 nov. 2005 à 17:14
Sans te déranger ne pourrai tu pas me montrer le code sans te déranger j'espere que ce n'est pas trop merci. Car en faite je voudrai convertir un nombre en
10 puissance -24c'est pour cela alors jevoudrai que le résultat soit 0.0000... etnon avec un E
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 11 nov. 2005 à 17:16
tiens juste pour jouer un petit bout de code d'un mini éditeur de
fonction (4 opérations et pas de gestion des exeptions: attention aux
erreurs de saisie elles provoqueune erreur d'exécution.-->seperateur
decimal= = ','
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 11 nov. 2005 à 17:25
salut tu ne peux pas afficher un nombre 10 ^-24 en effet le nombre de
chiffres significatifs maximum est de 18 or dans ton cas il faudrait
qu'il soit au minimum de 25. Tu ne peux donc le représenter que sous
forme de notation scientifique.
Ce qui reveint a stocker N nombres à 3 chiffres...
Ca impose de repenser la manière de calculer et pour l'affichage
Label.caption:='';
for i:= Amax downto 0 do
Label.caption:= intostr(A[i]+Label.caption
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 12 nov. 2005 à 00:35
deltafx--> le probleme c'est que tu ne peut pas stocker
plus de 18 chiffres significatifs sur 64 bits
(9223372036854775808';//2^63 le 64° bit etant le bit de signe) etque
tu si tu veux calculer sur 24 chiffres significatifs tu devras passer
en 96 ou 128 bits or il faudra passer par l'ASM et réécrire le
fonctions mathematiques dont tu as besoin.
Fais un test sur se que tu donnes et il y a fort à parier qu'à un
moment tu seras en overflow quand le résultat dépassera 18 chiffres
significatifs. (tout du moins tu repasseras en float)
d'ailleurs il suffit de consulter l'aide pour constater:
pour les types reels elle donne:
Real48 2.9 x 10^-39 .. 1.7 x 10^38 Chiffres significatifs 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 Chiffres significatifs 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 Chiffres significatifs 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 Chiffres significatifs 19-20 10
DeltaFX
Messages postés449Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention 8 avril 20092 12 nov. 2005 à 22:54
Je crois que t'as pas compris jlen : ma methode ne stoche que des
entiers inférieur a 1000 donc sur 3 chiffres uniquement. Le coup de
multiplier par 1000, 1e6, 1e9 c'est juste pour illustrer mon propos, ce
calcul n'est jamais fait.
C'est pour ca que je disais qu'il faut repenser la maniere de faire les opération : un simple plus
avec
A= 1500265 on a A0=265, A1=500, A2=1; et
B=25123458 on a B0= 458, B1=123, B2=25
Et le calcul se fait (en pseudo code)
for I:=0 to Max(Ai, Bi) do
begin
C[i]:= A[i] + B[i];
if C[i] > 999 then // on pose une retenue. c'est loin hein ;)
begin
A[i+1]:=A[i+1]+Trunc(C[i]/1000);
C[i]:= C[i] - Trunc(C[i]/1000);
end;
end;
Et hop, tu geres comme ca des trucs en précision absolu (12
millions de chiffres significatifs apres la virgule, si ca te chante)
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 12 nov. 2005 à 23:21
ok avec toi mais tu veux un peu d'efficacite il faudra passer par
l'assembleur sinon bonjour les temps de calcul et dans ce cas il n'est
pas sur que cela soit plus simple que de passer en arithmethique
128bits (4*32bit) plus adaptée à l'architecture du processseur
(he oui c'est quand meme du binaire)que l'arithmetique decimal.
et ce q'il cherche ce n'est pas la precision de calcul mais l'affichage de zero entre le nombre et la virgule.
Si son resultat vient d'une operation complexe et qu'il ne s'agit que
d'un affichage il vaut mieux travaillé directement sur la chaine
surtout que le floatostr donne le nombre de chiffres avant ou apres la
virgule (2 copy,une convertion) .
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201413 13 nov. 2005 à 22:39
quoique si tu as la nostalgie tu fais comme un peu de C (pas de c++ non
non du bon vieux C) ou l'ASM sur microcontroleur avec 4 ko de Ram et
8ko d 'EEPROM --> pas question d'utiliser la lib "maths" Mais comme
j'ai commencé sur un ZX81 avec...1ko de ram .... ou un peu apres sur PC
avec les applis dos (quoique pour certaines applis je regretteai
presque le vieux DOS au moins on pouvait adresser les ES maintenant
c'est une vraie galere,et avec windows qui reprend la main quand il
veut impossible de faire des timmings)