Varför blir detta ett program som inte fungerar som det ska utan bara går i en evighet?
class skrivaUtDouble
{
public static void main (String[] args)
{
double y;
for (y=0.1; y!=1.0; y=y+0.1)
{
System.out.println(y);
}
}
} // ----- Slut class skrivaUtDouble -----
Om y är 0.1 och det hela tiden läggs på 0.1 så kommer man ju så småningom till 0.9? Eller? Enligt min miniräknare gör man det i alla fall.
Jo, men som du ser när du kör programmet blir det inte exakt 1.0, utan det blir lite avrundingsfel, och då blir inte värdet 1.0, och då fortsätter programmet. Istället för y!=1.0 bör du använda y <= 1.0.
Jo, men som du ser när du kör programmet blir det inte exakt 1.0, utan det blir lite avrundingsfel, och då blir inte värdet 1.0, och då fortsätter programmet. Istället för y!=1.0 bör du använda y <= 1.0.
Nu tappade jag bort mig lite.
Varför blir det inte exakt 1.0?? hur kan det bli avrundingsfel, vilka värden avrundas??
Jo, men som du ser när du kör programmet blir det inte exakt 1.0, utan det blir lite avrundingsfel, och då blir inte värdet 1.0, och då fortsätter programmet. Istället för y!=1.0 bör du använda y <= 1.0.
Nu tappade jag bort mig lite.
Varför blir det inte exakt 1.0?? hur kan det bli avrundingsfel, vilka värden avrundas??
Flyttal kan inte representeras exakt i datorn, utan approximeras med ett tal som är nära. Därför lagras inte 1.0 som 1 utan som 1.0000000001 (eller nåt sånt, exakt hur det lagras kan skilja från dator till dator).