Hallo zusammen
Ich arbeite momentan an etwas Uhr-ähnlichem, wobei ich nun ein Problem habe. Der Code sieht folgendermassen aus (ich habe ihn auf das für dieses Problem Wesentliche reduziert):
Die Variable double h sollte also bei jedem Schleifendurchlauf um 5/60 erhöht werden, was unten wiederum den Winkel verändert und im Grunde genommen dazu führt, dass ein Punkt einen Kreisumfang entlangwandert. Allerdings bewegt sich dieser Punkt keinen Millimeter und auch der Output für h ist immer 15.0. Es sind noch weitere solcher Punkte mit genau demselben Code im Spiel, deren Variable sich immer um 1.0 erhöht, die funktionieren jedoch einwandfrei.
Aus irgendeinem Grund habe ich dann mal versucht, 5/60 durch 0.0833333333 zu ersetzen, was die Gewünschte Bewegung zur Folge hatte, jedoch ergibt sich dadurch natürlich eine gewisse Ungenauigkeit. So sollte h nach 60 Durchläufen theoretisch 20.0 sein, ist aber nur 19.999999998000035.
Die Abweichung ist zwar sehr gering und man könnte z.B. alle 60 Durchläufe eine Korrektur vornehmen, jedoch möchte ich, vor allem aus Lerngründen, gerne wissen, weshalb es mit 5/60 nicht klappt. Sollte ich ein anderes Zahlenformat wählen als double? Wenn ja, welches? Oder hat das eine ganz anderen Grund?
Ich bin euch dankbar für jede Hilfe und wünsche schöne Weihnachten
Silas
Ich arbeite momentan an etwas Uhr-ähnlichem, wobei ich nun ein Problem habe. Der Code sieht folgendermassen aus (ich habe ihn auf das für dieses Problem Wesentliche reduziert):
Java:
double h = 15;
while(true){
h = h + (5/60);
System.out.println(h);
x = cos(h * (-2 * Math.PI / 60) – 0.5 * Math.PI) * 50;
y = sin(h * (-2 * Math.PI / 60) – 0.5 * Math.PI) * 50;
}
Die Variable double h sollte also bei jedem Schleifendurchlauf um 5/60 erhöht werden, was unten wiederum den Winkel verändert und im Grunde genommen dazu führt, dass ein Punkt einen Kreisumfang entlangwandert. Allerdings bewegt sich dieser Punkt keinen Millimeter und auch der Output für h ist immer 15.0. Es sind noch weitere solcher Punkte mit genau demselben Code im Spiel, deren Variable sich immer um 1.0 erhöht, die funktionieren jedoch einwandfrei.
Aus irgendeinem Grund habe ich dann mal versucht, 5/60 durch 0.0833333333 zu ersetzen, was die Gewünschte Bewegung zur Folge hatte, jedoch ergibt sich dadurch natürlich eine gewisse Ungenauigkeit. So sollte h nach 60 Durchläufen theoretisch 20.0 sein, ist aber nur 19.999999998000035.
Die Abweichung ist zwar sehr gering und man könnte z.B. alle 60 Durchläufe eine Korrektur vornehmen, jedoch möchte ich, vor allem aus Lerngründen, gerne wissen, weshalb es mit 5/60 nicht klappt. Sollte ich ein anderes Zahlenformat wählen als double? Wenn ja, welches? Oder hat das eine ganz anderen Grund?
Ich bin euch dankbar für jede Hilfe und wünsche schöne Weihnachten
Silas