-
Title:
Opérations d'arithmétiques 2 - Introduction à la programmation en Java
-
Description:
07-16 Opérations d'arithmétiques 2
-
Initialement, si je compile
et exécute le testeur,
-
toutes les méthodes renvoient des zéros.
-
Rectifions l'amdahlSpeedup en premier.
-
Pour l'instant, il renvoie 0.
-
Et si je l'écris juste comme ça?
-
Maintenant, si je lance
à nouveau le testeur,
-
j'obtiens en réalité 2.875
-
alors que je m'y attendais à 1.6.
-
Je ferais mieux de revenir
en arrière et le corriger.
-
Maintenant, il fait d'abord les divisions,
-
donc 1 sur s et s sur n.
-
Ensuite les additions et
soustractions au milieu
-
et il n'y a pas de sens de la fraction
avec laquelle nous avons commencé.
-
Toute cette pièce, de s à n
-
devrait rester unie dans le dénominateur
-
et celle -1 doit rester unie
dans son numérateur.
-
Essayons ça encore.
-
On dirait que amdalhSpeedup fonctionne,
-
mais nous devons encore
faire le rapport croisé.
-
Je vais essayer de refaire
de façon un peu naïve.
-
J'ai écrit ça comme ça a l'air
mais l'ai aplati sur une ligne.
-
Donc, si je renvoie cette
quantité et que je compile,
-
j'obtiens une erreur, type inattendu,
-
classe valeur trouvée requise.
-
Cette erreur n'a probablement
pas beaucoup de sens pour le moment,
-
mais c'est un petit indice
de ce qui vient.
-
Une paire de parenthèses
comme celle-ci suivie
-
d'une autre quantité
a une autre signification
-
surtout, si vous mettez un type ici
-
au lieu d'une expression comme a - c.
-
Ce que je dois faire, c'est indiquer
ce que je veux multiplier
-
et je vais devoir le faire ici aussi.
-
Et maintenant, si j'essaie
de relancer le testeur,
-
je n'obtiens pas les bonnes
réponses pour le rapport croisé.
-
Car lorsque nous avons
un groupe d'opérateurs
-
avec les mêmes précédents,
-
Java commencera juste à gauche
et se déplacera vers la droite.
-
Donc, au lieu de calculer
a - c * b - d
-
sur, entre parenthèses, (b - c) * (a - d).
-
Cela donnera a - c * b - d / b - c
-
et toute cette quantité
multipliée par a - d.
-
Ce que je dois faire ici,
c'est grouper le dénominateur.
-
Je pourrais aussi regrouper
le numérateur, si je le voulais,
-
mais cela ne ferait pas
beaucoup de différence.
-
Si je compile à nouveau
et exécute le testeur,
-
j'ai maintenant deux méthodes
qui fonctionnent bien.
-
Maintenant pour la moyenne.
-
Je pourrais essayer de renvoyer
la somme de tous ces éléments,
-
tous divisés par quatre.
-
Voyons voir comment cela fonctionne.
-
Si je lance le testeur, il semble
que cela fonctionne dans un cas,
-
mais pas dans l'autre.
-
Regardons le deuxième cas.
-
Je vais aller lire à
l'intérieur du testeur.
-
Le cas qui ne fonctionne pas
est quand nous essayons
-
de prendre la moyenne de 3, 4, 3 et 3.
-
Nous devrions, en fait, nous
attendre à 3,25,
-
mais il semble que
nous perdons la décimale.
-
Java interprète cela
comme une division entière,
-
car 4 est un entier, et a, b, c et d
sont tous déclarés comme entiers.
-
Il y a plusieurs façons
de résoudre ce problème.
-
Je pourrais écrire 4 comme 4. ou 4.0
-
et alors il obtiendrait
la bonne réponse ici.
-
Ou je pourrais réellement changer
tous ces ints en doubles
-
et alors je n'aurais pas besoin
de spécifier que le 4 était un double.
-
Je peux compiler ceci, lancer
le testeur et cela fonctionne toujours.
-
C'est parce que si une de
ces variables est un double,
-
cette expression entière entre
parenthèses sortira comme un double
-
et un double divisé par un entier ne doit
pas être fait avec la division entière
-
qui requiert une division régulière.
-
C'est une chose vraiment
facile à confondre.
-
Cela nous semble juste,
mais l'ordinateur le lira mal
-
et le compilateur ne vous avertira pas.
-
Lorsque nous lançons cela
avec les ints et sans doubles,
-
nous avons vu que cela a fini
par être une erreur d'exécution.
-
Ceci est un bon exemple de pourquoi
il est utile de penser
-
à ce que vous voulez que
votre réponse soit à l'avance.
-
Calculez quelques exemples,
puis écrivez votre code.
-
Au plaisir avec ce quiz.