Zahlenbereiche abbilden auf andere Zahlenbereiche



  • .filmor schrieb:

    Schonmal was von den vier magischen Werkzeugen (Multiplikation, Division, Addition, Substraktion) gehört?

    👍 😉

    iceborg01 schrieb:

    Die rand / srand Funktion macht das ja indirekt auch, nur dass man der
    nur einen Bereich übergeben kann [...]

    Ok, nehmen wir 'mal an es wäre so...
    Dann könntest du dir doch eine Zufallszahl im Bereich ( max - min ) erzeugen lassen und zu min addieren, oder!?

    Du musst denken beim Programmieren.

    Greetz, Swordfish



  • Danke für die Info, aber das ist nicht das was ich möchte.

    @ Swordfish: Eben nicht. Den Zufallsgenerator schreibe ich selber.
    Dessen Ergebnis soll abgebildet werden.

    @ Alle:

    Bleiben wir mal bei meinem BSP 1.

    Deine Funktion Z = (Q + 1) * (6.0 / 10.0) + 0.5 (oder auch die von Michael)
    liefern für z. B. q = 2 eine z von 3.

    Aber der Quellbereich
    (der Einfachheit halber setzen wir ihn mal statt 0 bis auf 1 bis 9)
    soll linear abgebildet werden bis Quell(max) = Ziel(max) und danach
    wieder von vorne

    d. h:

    Quelle => Ziel

    1 => 1
    2 => 2
    3 => 3
    4 => 4
    5 => 5
    6 => 6
    7 => 1
    8 => 2
    9 => 3

    (Für die Abbildung des Quellbereiches 7 - 9 müsste man sich vielleicht
    noch was anderes ausdenken)



  • Dann benutz halt den Modulo-Operator.

    Wenn die Eingangsmenge größer als die Ausgangsmenge ist, ist die Operation nicht eindeutig.



  • Mit deinem Vorgehen machst du den Zufallsgenerator kaputt!!!
    Was du suchst ist der Rest der Division, in C++ der Modulo-Operator (%):

    Z = Q % 7;
    

    Übrigens entspricht das nicht deinen Angaben, selbst unter den "neuen Voraussetzungen".

    Aber wie gesagt, damit ist dein Zufallsgenerator nicht mehr zu gebrauchen, denk mal über die Verteilung der Zufallszahlen nach diesem Prinzip nach...



  • Danke.

    Habs mal durchgespielt.

    Ja mit Z mod Q geht es.

    Natürlich ist die Wirkung des Zuff-Gen verändert,
    da eben die generierte Zahl nicht unbedingt der endgültigen
    entspricht, aber das nehme ich in Kauf, da der Zuff-Gen
    funktioniert bis einschl. Q = Z(max) wegen der
    linearen Zuordnung und danach (Q = Z(max)+1) eben nicht mehr.

    Ich sehe auch keine andere Lösung,
    da z. B. mein Zuff-Gen als z. B. Einstellige Zahl, die immer
    0 - 9 ist, liefert und einer der nötigen Zielbereiche 1 - 6 ist.

    Gut man könnte ihn wiederholen bis er 1 - 6 ausspuckt, aber
    das will ich nicht.



  • Generier doch einfach den größtmöglichen Bereich (den Wertebereich deines Ausgabetyps). Damit fallen die Unterschiede nicht mehr ins Gewicht.

    Mit deiner Zuordnung kann nicht mehr von Zufall gesprochen werden, da die Wahrscheinlichkeit für 1-3 doppelt so hoch ist wie die für 4-6. Die Wirkung ist nicht nur verändert, sie ist hinüber.



  • Das wäre theor. möglich, aber:

    Mein Ausgabetyp ist int.

    Wenn ich nun einen Wert bis int(max) generiere würde das
    wahrscheinlich die sinnvolle Funktionalität meines
    Zufallsgenerators übersteigen, da dieser "echte" Zufallswerte
    nur im 1 bis 3 -stelligen Bereich liefert, also allerhöchtens bis 999.
    Darauf ist er ausgelegt.

    Möglichkeit:
    Na denn muss ich eben Q = zweistellig wählen (evtl. begrenzen)
    und dann umverteilen oder so.

    Aber wie gesagt, dass der Generator kaputt ist durch die Abbildung
    sehe ich nicht so. außerdem könnte man ja q noch beeinflussen
    im vorwege
    wenn q > z dann q z. B. +1 oder so.
    Möglicherweise spielt das Übergewicht bei Z von 1 bis 3 sogar in die Hände.

    Außerdem ist ja nicht nur Z 1-6 gefragt.

    Wie auch immer, wenn es andere Lösungen gibt, immer her damit.

    wichtig ist nur, dass mein Zuff-Gen erhalten bleibt.



  • Jetzt muss mir nur noch jemand erklären, warum die zuerst vorgeschlagenen Algorithmen nicht funktionieren und man das alles so kompliziert machen muss 🙄



  • iceborg01 schrieb:

    [...] da dieser [Zufallsgenerator] "echte" Zufallswerte
    nur im 1 bis 3 -stelligen Bereich liefert, also allerhöchtens bis 999.

    Darf den von dir Implementierten Zufallsgenerator aus bloßer Neugier 'mal sehen?

    Greetz, Swordfish



  • @ Michael: weil ich vorhin schon schrieb, dass die anderen Algos nicht
    linear sind und für z. B. q = 2 z = 3 liefern u. ä.

    @ Swordfish: Ich kann und will meinen Zuff-Gen noch nicht herausgeben.
    (Später gerne)
    Er ist nocht nicht implementiert, sondern existiert bisher
    nur auf dem Papier.
    Was viel wichtiger als später das implementieren ist:
    Er ist in umfangreichen Kalk-Tabellen
    durchgespielt worden, um zu sehen, ob er Sinn macht.

    Ich sag mal soviel: Er basiert auf timer und rand/srand
    und im weiteren Rechenverlauf auf sqrt und den Winkelfunkt.
    eines bel. Dreiecks, wenn p,q,h bekannt sind und man in Richtung
    einiger Teile von alpha,beta,gamma rechnet.

    Da ich gerade mit c++ erst anfange und für dieses Hobby nur wenig zeit habe,
    wirds wohl noch dauern.



  • Also wenn du mit Winkelfunktionen rumspielst, dann sollte das Teil dann aber auch double zurückliefern. Ich bezweifle doch stark, dass du damit Ganzzahlen herausbekommst. Dann erübrigt sich der Modulo-Unsinn, da Modulo für Fließkommazahlen nicht definiert ist.



  • Ja das ist richtig.

    Die winkel werden wohl double werden, aber das sind
    ja nicht die endgültigen Zahlen, sondern nur Teile davon,
    die dann letztenendes int sein können.

    **
    So ich muss mich jetzt vorerst verabschieden.
    Wie gesagt, für dieses Hobby bleibt leider nur wenig zeit.
    Bis hoffentlich zum nächsten mal.**



  • Swordfish schrieb:

    Du musst denken beim Programmieren.

    Also die Aussage lob ich mir doch mal...

    Vllt. sollte es im 'Info-Thread' des C++-SubFoums heißen:

    [...]Bevor ihr ein neues Thema startet, benutzt bitte die Suchfunktion, werft einen Blick in die FAQs und denkt!.

    Das scheinen einige zu vergessen 😃 .



  • iceborg01 schrieb:

    @ Michael: weil ich vorhin schon schrieb, dass die anderen Algos nicht
    linear sind und für z. B. q = 2 z = 3 liefern u. ä.

    Und?


Anmelden zum Antworten