hema80Medlem sedan sep. 2004137 inlägg 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.
pettssonMedlem sedan jan. 20021 122 inlägg 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.
pettssonMedlem sedan jan. 20021 122 inlägg Hm, just det, han ville ju att y inte skulle vara 1. :r
SjodahlMedlem sedan maj 20033 218 inlägg
pettsson skrev:
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??
pimmeMedlem sedan sep. 20011 086 inlägg
Sjodahl skrev:
pettsson skrev:
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).
SjodahlMedlem sedan maj 20033 218 inlägg så med andra ord kan man aldrig sätta ett exakt värde på en double variabel?
pimmeMedlem sedan sep. 20011 086 inlägg
Sjodahl skrev:
så med andra ord kan man aldrig sätta ett exakt värde på en double variabel?
Nej.
Eller, du kan ju sätta
double i = 1.0
Det är dock inte säkert att i blir precis 1.0
SjodahlMedlem sedan maj 20033 218 inlägg nej det jag menar, tycker det verkar skumt helt enkelt ;) då borde det finnas något sådant där vågtecken ungeförlika med istället för likamed ;)