jmp77
Messages postés1119Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention 4 octobre 20067 20 déc. 2004 à 09:51
Hello delphiprog,
Sympa ton code et à chaque fois que je lis un de tes codes j'apprends des choses lol. Tu m'épateras toujours.
Sinon ce n'est pas exactement ce que nous recherchions avec Mauricio. Nous ce que voudrions c'est savoir le nombre de caractère maximum d'un champ déclaré en integer ou en floattant dans une base sans lire tous les enregistrements.
Je te remercie de penser à nous. Si tu as une idée pour notre souci ...
Bonne prog,
JMP77.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 19 déc. 2004 à 18:14
Comme tu peux le voir, je n'ai que les versions impaires. Tu pourras donc toujours me coincer avec celles qui sont paires. D7 me sert juste à ouvrir tous vos codes. La version 3 est totale révolutionnaire... Mais en fait, c'est plus subtile que ça. Chut !
Si on met un nombre entier dans l'edit, on obtiont par exemple 5 * 10^-2 50 ou pire 12 * 10^-2 12.
Il y a comme un probleme....
PS : booleans: array[boolean] of string = ('non', 'oui');
Ce qui me fait marrer, c'est le commentaire de la ligne du dessus : INTERNATIONALISATION DES CHAINES !!!!!
TryStrToFloat existe sous Delphi 6.
n'est-ce-pas grandvizir qui refuse absolument de lacher sa version 3. toi qui dit pourtant dans ton commentaire perso que tu a la version 7.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 19 déc. 2004 à 10:13
Sans vouloir être méchant, je trouve ce code un peu décevant par rapport au grand potentiel de DelphiProg pour faire des applications de ouf, lui qui en sait tant. Je me réserve donc en attendant...
Toutes précisions sont bonnes à entendre. En l'occurrence ici, j'ajoute que sa fonction TryStrToFloat ne débarque que depuis Delphi 7.
Et sinon, en ce qui concerne mes logs, je dirais qu'il serait plus court de passer par StrToFloat et Pos, que de s'amuser à faire des logarithmes, des valeurs absolues et des conditions IF...
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 19 déc. 2004 à 07:45
Effectivement, concernant le nombre de chiffres significatifs, c'est bon, je n'ai jamais eu de doute à ce sujet, Delphiprog a toujours bien programmé
(j'amenais juste une précision sur un format de notation dont on parle rarement mais qui est important pour notre compréhension).
Delphiprog met un lien sur les IEEE qui explique aussi ce format à voir absolument pour ceux qui voudraient un complément d'info.
Dans le syle array, moi aussi j'ai bien aimé aussi le :
booleans: array[boolean] of string = ('non', 'oui');
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 18 déc. 2004 à 20:07
«Le seul objectif était de connaitre le nombre de chiffres significatifs situés avant le point décimal et rien d'autre.» Ma technique vaut ce qu'elle vaut. Je n'étais pas là pour la question du forum qui a inspiré ce code.
Si le array[boolean] ne me surprend pas du tout, c'est uniquement parce qu'il faut le comprendre comme un array[false..true], ce qui est basé sur le même principe que array[0..1].
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 18 déc. 2004 à 19:05
c'est intéressant mais ce n'est pas ça qu'on appelle exposant et mantisse en informatique, j'ai beaucoup travaillé sur IEEE 32 bits et 64 bits, je propose de regarder les liens qui expliquent cela, j'avais fait un source à ce sujet me donnant une suite binaire à partir d'un float codé en IEEE 32 bits, j'ai testé avec mon programme et ceux qu'on trouve sur internet, je pense qu'il y a confusion donc je vous donne un lien ou vous avez entre autre ce genre de manipulation (en anglais, espagnol pour ce coup ci mais il y a d'autres sites qui l'explique en français :
Le fameux convertisseur s'y trouve on peutl'essayer directement en allant au paragraphe "§8.3.5 Convertidor automático de formatos" et vous cliquez au lien "Convertidor"
effectivement on peut s'amuser royalement à comprendre le système IEEE qui est la base de nos PC ;)
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 18 déc. 2004 à 17:35
Une petite séance de maths sera la bienvenue, me semble-t-il, car les logarithmes vous ont manifestement laissé sur la touche.
Soit X le nombre décimal dont on veux chercher le nombre de chiffres significatifs. Le programme suivant est une ébauche.
program Review;
uses SysUtils;
implementation
function Log(X:real):real;
begin
log:=ln(x)/ln(10);
end;
begin
X:=|X|; //valeur absolue, abs(X)
if X<1 then NbSignif:=0
else NbSignif:=Trunc( log(X) + 1 );
end.
Rappel sur le logarithme décimal (base 10 et non base e=2,7182818.... qui serait alors le logarithme népérien):
log(1)=0
log(10)=1
log(100)=2
...
log(10^n)=n
D'où on déduit en prenant un exemple
log(150)
= log(100) + UneCertaineQuantité
= 2 + QQCH (QQCH strictement inférieur à 1)
En ajoutant 1 à 2 et en prenant la partie entière (ou la troncature), on obtient 3. N'est-ce pas ce qu'on voulait ? On a ici pas utilisé de conversions.
Après on peut s'amuser royalement.
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015 18 déc. 2004 à 13:46
Salut,
en IEEE 32bits (qui existe aussi en 64 bits)qui sont les normes utilisées pour les floats sur nos PC
pour 123,456789 :
le signe est :0
l'exposant est :6
la mantisse est :1,929012328125
je peux te détailler la méthode de calcul au besoin
je ne comprends pas quelle norme tu as utilisée, pourrais tu préciser , merci ? ;)
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 18 déc. 2004 à 13:19
oui c sur ke avec la " , " " . " pis fo effectivement transformer en string.
je savais pas non plus ke ça venais d'une demande de ces gens tres actifs en ce moment :p
ouèouè ce booleans en array là, j'en suis tout retourné, ça va me faire modif des sources ça !! :D merki merki :D
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 18 déc. 2004 à 13:12
Je suis d'accord avec toi JulioDelphi. Mais pour cela, il faut transformer le nombre réel en chaine d'abord.
Or, ce que demandaient Mauricio et jmp77 c'était de pouvoir connaitre le nombre de chiffres significatifs sans faire de transformation au préalable.
De plus, je te rappelle que la position du séparateur décimal (et pas seulement du caractère '.') n'est pas la seule chose à prendre en compte. Il faut aussi tenir compte du signe.
Je suis content de t'avoir bluffé ;o)
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 18 déc. 2004 à 11:21
pour trouver le nb de chiffres avant le point j'aurais fait un pos('.',valeur)-1 lol
ce qui m'a bluffé c'est le booleans: array[boolean] of string = ('non', 'oui'); :O
20 déc. 2004 à 09:51
Sympa ton code et à chaque fois que je lis un de tes codes j'apprends des choses lol. Tu m'épateras toujours.
Sinon ce n'est pas exactement ce que nous recherchions avec Mauricio. Nous ce que voudrions c'est savoir le nombre de caractère maximum d'un champ déclaré en integer ou en floattant dans une base sans lire tous les enregistrements.
Je te remercie de penser à nous. Si tu as une idée pour notre souci ...
Bonne prog,
JMP77.
19 déc. 2004 à 18:14
19 déc. 2004 à 17:03
Si on met un nombre entier dans l'edit, on obtiont par exemple 5 * 10^-2 50 ou pire 12 * 10^-2 12.
Il y a comme un probleme....
PS : booleans: array[boolean] of string = ('non', 'oui');
Ce qui me fait marrer, c'est le commentaire de la ligne du dessus : INTERNATIONALISATION DES CHAINES !!!!!
TryStrToFloat existe sous Delphi 6.
n'est-ce-pas grandvizir qui refuse absolument de lacher sa version 3. toi qui dit pourtant dans ton commentaire perso que tu a la version 7.
19 déc. 2004 à 10:13
Toutes précisions sont bonnes à entendre. En l'occurrence ici, j'ajoute que sa fonction TryStrToFloat ne débarque que depuis Delphi 7.
Et sinon, en ce qui concerne mes logs, je dirais qu'il serait plus court de passer par StrToFloat et Pos, que de s'amuser à faire des logarithmes, des valeurs absolues et des conditions IF...
19 déc. 2004 à 07:45
(j'amenais juste une précision sur un format de notation dont on parle rarement mais qui est important pour notre compréhension).
Delphiprog met un lien sur les IEEE qui explique aussi ce format à voir absolument pour ceux qui voudraient un complément d'info.
Dans le syle array, moi aussi j'ai bien aimé aussi le :
booleans: array[boolean] of string = ('non', 'oui');
18 déc. 2004 à 20:07
Si le array[boolean] ne me surprend pas du tout, c'est uniquement parce qu'il faut le comprendre comme un array[false..true], ce qui est basé sur le même principe que array[0..1].
18 déc. 2004 à 19:05
http://www.nuvisionmiami.com/books/asm/workbook/floating_tut.htm
une autre adresse (en espagnol) http://www.zator.com/Cpp/E2_2_4a.htm
Le fameux convertisseur s'y trouve on peutl'essayer directement en allant au paragraphe "§8.3.5 Convertidor automático de formatos" et vous cliquez au lien "Convertidor"
effectivement on peut s'amuser royalement à comprendre le système IEEE qui est la base de nos PC ;)
18 déc. 2004 à 17:35
Soit X le nombre décimal dont on veux chercher le nombre de chiffres significatifs. Le programme suivant est une ébauche.
program Review;
uses SysUtils;
implementation
function Log(X:real):real;
begin
log:=ln(x)/ln(10);
end;
begin
X:=|X|; //valeur absolue, abs(X)
if X<1 then NbSignif:=0
else NbSignif:=Trunc( log(X) + 1 );
end.
Rappel sur le logarithme décimal (base 10 et non base e=2,7182818.... qui serait alors le logarithme népérien):
log(1)=0
log(10)=1
log(100)=2
...
log(10^n)=n
D'où on déduit en prenant un exemple
log(150)
= log(100) + UneCertaineQuantité
= 2 + QQCH (QQCH strictement inférieur à 1)
En ajoutant 1 à 2 et en prenant la partie entière (ou la troncature), on obtient 3. N'est-ce pas ce qu'on voulait ? On a ici pas utilisé de conversions.
Après on peut s'amuser royalement.
18 déc. 2004 à 13:46
en IEEE 32bits (qui existe aussi en 64 bits)qui sont les normes utilisées pour les floats sur nos PC
pour 123,456789 :
le signe est :0
l'exposant est :6
la mantisse est :1,929012328125
je peux te détailler la méthode de calcul au besoin
je ne comprends pas quelle norme tu as utilisée, pourrais tu préciser , merci ? ;)
18 déc. 2004 à 13:19
je savais pas non plus ke ça venais d'une demande de ces gens tres actifs en ce moment :p
ouèouè ce booleans en array là, j'en suis tout retourné, ça va me faire modif des sources ça !! :D merki merki :D
18 déc. 2004 à 13:12
Or, ce que demandaient Mauricio et jmp77 c'était de pouvoir connaitre le nombre de chiffres significatifs sans faire de transformation au préalable.
De plus, je te rappelle que la position du séparateur décimal (et pas seulement du caractère '.') n'est pas la seule chose à prendre en compte. Il faut aussi tenir compte du signe.
Je suis content de t'avoir bluffé ;o)
18 déc. 2004 à 11:21
ce qui m'a bluffé c'est le booleans: array[boolean] of string = ('non', 'oui'); :O
je viens d'en apprendre une bonne :p