Mendz.Essomb.F a écrit:j'aimerai calculer numériquement la fonction suivante
pouvez vous m'aider par un programme informatique
L'algo utilise le fait que, si on doit calculer TOUT les pour n de 0 à N, le plus rapide est de les calculer par récurrence : et pourAlgo a écrit:S=0; n=0; U=1/4; Y=(X^2)^2; {X donné précédement}
tant que U0 faire
S=S+U; n=n+4; U=-U*Y/(n*(n-1)*(n-2)*(n-3));
fin du temps que
e "U0" peut éventuellement être remplacé par un "abs(U)<0.0000000001", mais dans presque tout les langage que je connais, U fini par valoir (assez rapidement) exactement 0.
leon1789 a écrit:Pas d'accord : si tu prends le nombre flottant strictement positif minimal (en fonction du codage des flottants, genre IEEE 754) et que tu le divise par 10, le résultat ne peut pas valoir autre chose que 0 pile.
Bref, si tu prends x=1.1 et que tu le divise par 10 mille fois, ça devrait donner 0 pile.
https://fr.wikipedia.org/wiki/IEEE_754
Citation:
e "U0" peut éventuellement être remplacé par un "abs(U)<0.0000000001", mais dans presque tout les langage que je connais, U fini par valoir (assez rapidement) exactement 0.
Avec ma machine, je n'ai pas réussi à avoir 0.
En fait, une variable en virgule flottant ne peut valoir 0 à coup sûr que si on lui a donné la valeur 0.
Dlzlogic a écrit:Tu n'es pas d'accord qu'avec ma machine, je n'arrive pas avoir zéro pile, ou tu n'est pas d'accord avec ma seconde phrase (cas général de comparaison de flottants avec 0).
Dans le premier cas, je t'invite à venir voir, dans le second, tu devrais faire un essai avec la tienne.
function test() {
var i = 1.1 , j ;
alert ("en divisant 1.1 par 10.0 un grand nombre de fois...")
for(j = 0; i>0.0 ; j++) {i = i / 10.0 }
if (i==0.0) {alert("... on finit par obtenir 0 pile !")}
alert([i,j]);
}
test() ;
Dlzlogic a écrit:Avec ma machine, je n'ai pas réussi à avoir 0.
En fait, une variable en virgule flottant ne peut valoir 0 à coup sûr que si on lui a donné la valeur 0.
Dlzlogic a écrit:Tu n'es pas d'accord qu'avec ma machine, je n'arrive pas avoir zéro pile, ou tu n'est pas d'accord avec ma seconde phrase (cas général de comparaison de flottants avec 0).
Dans le premier cas, je t'invite à venir voir, dans le second, tu devrais faire un essai avec la tienne.
function test() {
var i = 1.1 , j ;
alert ("en divisant 1.1 par 10.0 un grand nombre de fois...")
for(j = 0; i>0.0 ; j++) {i = i / 10.0 }
if (i==0.0) {alert("... on finit par obtenir 0 pile !")}
alert([i,j]);
}
test() ;
Je pense tout de même que cette affirmation mérite une vérification ou un exemple, à défaut de preuve.
Dlzlogic a écrit:Bon, j'ai bien-sûr regardé, j'ai eu une page blanche.
Je viens de recommencer, c'est pareil.
Dlzlogic a écrit:Disons que, pour ne pas envenimer la discussion, j'ai pas régi.
Bon, j'accepte tout ce que tu veux, FE aussi, que voulez-vous que j'y fasse ?
S'il te plait, fin de discussion, d'ailleurs, tu as bien explique que j'étais pas crédible (on appelle ça de la diffamation), FE a confirmé que j'étais un incompétent sénile, alors tout va bien.
Couche-couche-dodo.
Dlzlogic a écrit:Petit sursaut dhonnête de ma part, pour les débutants en informatique : il ne faut pas tester l'égalité de deux flottants avec le signe '==', sauf si on l'a initialisé comme tel.
Dlzlogic a écrit:Je pense tout de même que cette affirmation mérite une vérification ou un exemple, à défaut de preuve.
Le test est simple
si ( val "strictement égal à zéro") alors "on a trouvé zéro".
En C, ça s'écrit
if (val == 0.0) printf("on a trouvé ZERO\n");
Bien entendu val est un float ou double, initialisé comme on veut et qui a été divisé par 10 ou ce qu'on veut le nombre de fois que l'on veut.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités
Tu pars déja ?
Identification
Pas encore inscrit ?
Ou identifiez-vous :