Autor Beitrag
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Fr 11.03.05 23:38 
N'Abend :)!

Gibt es eine Möglichkeit, eine Art Modulo für Fließkommazahlen zu schreiben. Konkret geht es um folgende Anwendung: der Benutzer gibt einen Winkel in Radiant (oder Grad) ein und das Programm muss ihn < 2 Pi machen, also:

ausblenden Delphi-Quelltext
1:
2:
while winkel > 2 * Pi do
  winkel := winkel - 2 * Pi;


Nachteil dieser Methode: wenn der Benutzer mal lustig ist und 999999999999 als Winkel eingibt wird er feststellen, dass das Programm fast 2min. beschäftigt ist, den Winkel herunterzurechnen. Irgendwie nicht so das Wahre... gibt's da keine bessere Lösung?

AXMD


Zuletzt bearbeitet von AXMD am Sa 12.03.05 09:48, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 11.03.05 23:56 
Zum einen muss es in Deinem Quellcode IMHO winkel > 2*Pi sein, zum anderen kannst Du es so machen: winkel := frac(0.5 * winkel / pi)*2*Pi;. Hoffe, die späte Uhrzeit hat mich nicht Schwachsinn produzieren lassen ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.03.05 09:50 
user profile iconChristian S. hat folgendes geschrieben:
Zum einen muss es in Deinem Quellcode IMHO winkel > 2*Pi sein, zum anderen kannst Du es so machen: winkel := frac(0.5 * winkel / pi)*2*Pi;. Hoffe, die späte Uhrzeit hat mich nicht Schwachsinn produzieren lassen ;-)


Hab's korrigiert. War ein Tippfehler - im echten Programm steht natürlich > ^^. Darf ich fragen, was das Frac(0,5 * winkel ....) macht?

AXMD
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 12.03.05 10:27 
Deine Frage irritiert mich AXMD.
Natürlich darfst du fragen. Ich hätte nur erwartet, dass du mal die OH konsultierst.

Frac gibt der den Teil nach dem Komma zurück. Trunc gibt dir das vor dem Komma.
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.03.05 10:29 
user profile iconjasocul hat folgendes geschrieben:
Deine Frage irritiert mich AXMD.
Natürlich darfst du fragen. Ich hätte nur erwartet, dass du mal die OH konsultierst.

Frac gibt der den Teil nach dem Komma zurück. Trunc gibt dir das vor dem Komma.


Das ist mir klar :p; mir ist nur nicht klar, was das Ganze im Frac machen soll, also das
Zitat:
0.5 * winkel / pi
...

AXMD
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 12.03.05 10:37 
Achso!
Dir ging es inhaltlich um den Parameter von Frac.
Habe mir jetzt die Funktion nicht im Detail angesehen.
Im Prinzip ist das nichts anderes als Modulo. Frac ist im Prinzip der Rest eine Division. Genau wie bei Modulo.
Und wenn ich das auf die schnelle richtig interpretiere bekommst du durch den Faktor dahinter den gewünschten Wert.
Aber ich bin ehrlich: Ich habe gerade keine Lust das genau nachzuvollziehen :wink:
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.03.05 10:39 
user profile iconjasocul hat folgendes geschrieben:
Achso!
Dir ging es inhaltlich um den Parameter von Frac.
Habe mir jetzt die Funktion nicht im Detail angesehen.
Im Prinzip ist das nichts anderes als Modulo. Frac ist im Prinzip der Rest eine Division. Genau wie bei Modulo.
Und wenn ich das auf die schnelle richtig interpretiere bekommst du durch den Faktor dahinter den gewünschten Wert.
Aber ich bin ehrlich: Ich habe gerade keine Lust das genau nachzuvollziehen :wink:


Und ich würds gern nachvollziehen, damit ich es ohne Sorgen einbauen kann ^^

AXMD
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 12.03.05 10:55 
Ich versuchs mal, obwohl Wochenende ist :wink:

Christian:
winkel := frac(0.5 * winkel / pi)*2*Pi;
oder
winkel := frac(winkel / (2*pi))*2*Pi;


AXMD:
while winkel > 2 * Pi do
winkel := winkel - 2 * Pi;

Jasoculs Erläuterungen (Achtung! Das ist kein Beweis!):
Du willst immer 2*Pi abziehen bis der winkel < 2*Pi ist.
Wenn du das oft genug machst, nämlich solange, wie es erfoderlich ist, kommst du zwangsläufig auf:
winkel/(2*Pi). Das kannst du mal per Hand prüfen. Taschenrechner sei erlaubt. :wink:
Da dich für deine Funktion aber der "Modulo-Rest" interessiert, musst du den Dezimal-Rest mit 2*Pi wieder multiplizieren.

Ich hoffe, dass das nachvollziehbar ist.
Bin noch nicht vollständig von gestern erholt. :beer:

EDIT:
Theoretisch müsste ein ähnliches Verfahren auch funktionieren, wenn du den eigegebenen Winkel vorher durch 360 dividierst.
wdbee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 628
Erhaltene Danke: 1



BeitragVerfasst: Sa 12.03.05 10:58 
Einfach einen Vollkreis auf die Skala 1.0 abbilden, dann nur die Kommastellen verwenden und wieder auf Vollkreis abbilden. Das ist das, was dahinter steht. Die vollen Umdrehungen gehen dadurch verloren.
AXMD Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Sa 12.03.05 11:01 
Leuchtet mir irgendwie nicht ein... abgesehen davon gibt mit Frac nur den Nachkommateil zurück. Beispiel (Ergebnisse lt. Taschenrechner):

Winkel = 1234

Winkel / (2 * Pi) ergibt 196,397199775

Frac(Ans) ergibt 0,3971997754 (Ans ist 196,397..., also das letzte Ergebnis)

und das * 2Pi ergibt 2,49567979281

was wirklich dem korrekten Winkel entspricht :gruebel:

AXMD
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6386
Erhaltene Danke: 146

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 12.03.05 11:02 
user profile iconwdbee hat folgendes geschrieben:
Einfach einen Vollkreis auf die Skala 1.0 abbilden, dann nur die Kommastellen verwenden und wieder auf Vollkreis abbilden. Das ist das, was dahinter steht. Die vollen Umdrehungen gehen dadurch verloren.

Misst, warum bin ich nicht auf den Einheitskreis gekommen. Alkohol vernichtet offensichtlich wirklich die Gehirnzellen.