Je programmation avoir une simple question .. Je ce code:mathématiques et dans physic
program wtf;
var i:integer;
begin
for i:=1 to 20 do
if sqrt(i)*sqrt(i)<>i then writeln(i);
readln
end.
... il passe par la boucle 20 fois et pour les nombres de 1 à 20 et il vérifie si racine carrée multipliée acheter racine carrée de même nombre est égale à ce nombre. Si nous utilisons des règles mathématiques ce programme ne devrait jamais avoir quoi que ce soit sur la sortie, mais .... Je ça:
2
3
5
6
7
8
10
12
13
15
18
19
20
peut sombody expliquer ce qui se passe?
Lorsque vous utilisez des flottants, sur un ordinateur, vous ne pouvez pas comparer les valeurs et attendre une égalité absolue. Vous devez utiliser une comparaison de différence de seuil. les flotteurs ne sont pas utilisés pour *** compter *** les choses, ils sont utilisés pour *** mesurer *** les choses. Deux valeurs mesurées ne sont jamais *** exactement *** la même chose. ils sont seulement "assez proches". –
Ce n'est pas un modèle mental très productif. Le moyen le plus utile de penser à cela est que toutes les valeurs ne peuvent pas être représentées exactement. –
Vous ne pouvez pas représenter 0.1 exactement en binaire plus que 1/3 en décimal. – duffymo