web-dev-qa-db-fra.com

boucle for, incrémentation du double

Je veux utiliser la boucle for pour mon problème, pas pendant. Est-il possible de faire ce qui suit?:

for(double i = 0; i < 10.0; i+0.25)

Je veux ajouter des valeurs doubles.

22
Upvote

Pour éviter d'être mordu par des artéfacts d'arithmétique en virgule flottante, vous pouvez utiliser une variable de boucle entière et dériver la valeur en virgule flottante dont vous avez besoin dans votre boucle:

for (int n = 0; n <= 40; n++) {
    double i = 0.25 * n;
    // ...
}
52
rsp

Vous pouvez utiliser i += 0.25 au lieu.

27
JamesMLV

La réponse de James a attrapé l'erreur la plus évidente. Mais il y a un problème plus subtil (et IMO plus instructif), en ce que les valeurs en virgule flottante ne doivent pas être comparées pour une (in) égalité.

Cette boucle est sujette à des problèmes, utilisez juste une valeur entière et calculez la valeur double à l'intérieur de la boucle; ou, moins élégant, donnez-vous une marge: for(double i = 0; i < 9.99; i+=0.25)

Edit: la comparaison originale fonctionne bien, car 0,25 = 1/4 est une puissance de 2. Dans tous les autres cas, il se peut qu'elle ne soit pas exactement représentable sous forme de nombre à virgule flottante. Un exemple du problème (potentiel):

 for(double i = 0; i < 1.0; i += 0.1) 
     System.out.println(i); 

imprime 11 valeurs:

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
9
leonbloy

Dans

for (double i = 0f; i < 10.0f; i +=0.25f) {
 System.out.println(i);

f indique float

L'ajout de = indique un raccourci pour i = i + 0,25;

2
Karthik
for(double i = 0; i < 10.0; i+=0.25) {
//...
}

L'ajout = indique un raccourci pour i = i + 0,25;

2
Valchris

Pour un entier. Nous pouvons utiliser: for (int i = 0; i < a.length; i += 2)

for (int i = 0; i < a.length; i += 2) {
            if (a[i] == a[i + 1]) {
                continue;
            }
            num = a[i];
        }

De la même manière que nous pouvons faire pour d'autres types de données également.

0
Nikhil Kumar