75% - Wert einer Zahl

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

75% - Wert einer Zahl

Beitrag von Dr. Irata »

Janko und ich haben uns gerade kurz ausgetauscht über die Möglichkeit eines 50- bzw 75% igen Wertes einer Zahl in Assembler.
In einem Spiel kann es ja vorkommen, daß ein bestimmter Wert zu 75% erreicht werden muss, damit es dann entsprechend z.B. in einen nächsten Level weitergehen kann.

50 % muss man wohl hier nicht erklären... aber wie ist es mit 75%?

erster Ansatz:

Code: Alles auswählen

LDA Wert
LSR
LSR
STA Temp
SEC
LDA Wert
SBC Temp
STA Wert75Prozent
ok... das geht doch schneller
Hier die Lösung von ChatGPT:

Code: Alles auswählen

LDA Wert
ASL
CLC
ADC Wert
LSR
LSR
STA Wert75Prozent
Die KI ist gut... aber Brain ist noch besser:
Zunächst lassen wir mal CLC oder SEC weg, das kürzt sich eh komplett raus und ist am Ende für einen z.B. 75% Vergleich völlig irrelevant.
Hier der schnellste Code:

Code: Alles auswählen

LDA Wert
LSR
ADC Wert
LSR
STA Wert75Prozent

FlorianD
Beiträge: 379
Registriert: 19.08.2021 00:18
Has thanked: 74 times
Been thanked: 150 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von FlorianD »

korrigiert mich bitte falls ich falsch liege.

Wert=192 = %1100 0000
LSR Wert => %0110 0000
ADC #%1100 0000

%0110 0000
%1100 0000 +
=========
%0010 0000 C=1
LSR
%0001 0000 C=0
d16 ist nicht 75% von d192

oder mache ich einen Denkfehler?

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

Ja das muss man natürlich berücksichtigen... bei höheren Werten kommt man über 255 und dann wird es problematisch.
Der 3. Ansatz funktioniert wohl nur korrekt bei Werten bis 170

Code: Alles auswählen

LDA Wert
LSR
CLC
ADC Wert
ROR
STA Wert75Prozent
so müsste es dann klappen

Benutzeravatar
Mathy
Beiträge: 1754
Registriert: 18.06.2021 11:13
Wohnort: Heerlen, NL
Has thanked: 846 times
Been thanked: 481 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Mathy »

.
Hallo Leute

Würde 100% - (50%x50%=25%) funktionieren?

Tschüß

Mathy
Schreibe nicht der Absicht zu, was man mit Dummheit oder Ignoranz erklären kann.

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

Hey Mathy... klar doch. Und wenn du dir den ersten Ansatz genau anschaust, dann wirst du sehen, daß der genau so funktioniert.
Zunächst wird 2x halbiert mit LSR, der 25% Wert in Temp zwischengespeichert und dann vom 100%-Wert abgezogen.
Super Lösung, aber etwas langsamer als die anderen Ansätze.

Benutzeravatar
RhoSigma
Beiträge: 84
Registriert: 29.04.2024 22:44
Has thanked: 1 time
Been thanked: 14 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von RhoSigma »

Dr. Irata hat geschrieben:
29.05.2025 15:05

Code: Alles auswählen

LDA Wert
LSR
CLC
ADC Wert
ROR
STA Wert75Prozent
so müsste es dann klappen
Das CLC kann noch weg. Das sorgt dafür, das 0.5 abgerundet wird. Ohne wird es aufgerundet. Man kann sich streiten, was "das Richtige" hier ist, da ja insbesondere das ROR wieder abrundet. Also behaupte ich mal, OHNE ist es schneller und sogar präziser.

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

... ne das CLC muss m.E. leider drin bleiben, da man sonst evt. mit LSR ein Carry setzt und mit ADC das dann fälschlich addiert...

Benutzeravatar
RhoSigma
Beiträge: 84
Registriert: 29.04.2024 22:44
Has thanked: 1 time
Been thanked: 14 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von RhoSigma »

Dr. Irata hat geschrieben:
29.05.2025 22:51
... ne das CLC muss m.E. leider drin bleiben, da man sonst evt. mit LSR ein Carry setzt und mit ADC das dann fälschlich addiert...
Ja, genau DAS ist auch der Plan. Du berechnest ja (x + x/2)/2. MIT dem CLC wird x/2 abgerundet. OHNE wird es aufgerundet. Das letzte /2 rundet dann wieder ab.
D.h. MIT CLC rundest Du 2 mal ab, OHNE einmal auf, einmal ab.

Einigen wir uns ersteinmal darauf, dass das nur bei ungeradem x eine Rolle spielt ,weil sonst das Carry immer 0 ist, ja?

DANN würde es genau dann einen Unterschied machen, wenn die erste Summe mit Abrunden UNGERADE ist, und mit Aufrunden gerade (nur DANN ist ja die zweite Summe größer), weil anderenfalls wird der Unterschied ja durch das folgende /2 wieder entfernt.

Also, z.B:

(9 + 9 /v/ 2) /v/ 2 = (9+4) /v/ 2 = 6
(9 + 9 /^/ 2) /v/ 2 = (9 + 4 + 1) /v/ 2 = 7

9. * .75 = 6.75

Also ist das Ergebnis OHNE clc genauer.

Ok, war jetzt kein richtiger Beweis, aber "man sieht die Tendenz" :)


Benutzeravatar
RhoSigma
Beiträge: 84
Registriert: 29.04.2024 22:44
Has thanked: 1 time
Been thanked: 14 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von RhoSigma »

atarixle hat geschrieben:
31.05.2025 08:41
(X+X+X)>>2
Das ist die ChatGPT Variante, da gibt es halt recht schnell einen Überlauf.

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

ja CLC kann weg, da es irrelevant in diesem Fall ist!

Benutzeravatar
atarixle
Beiträge: 381
Registriert: 18.06.2021 21:19
Has thanked: 39 times
Been thanked: 73 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von atarixle »

RhoSigma hat geschrieben:
31.05.2025 09:04
atarixle hat geschrieben:
31.05.2025 08:41
(X+X+X)>>2
Das ist die ChatGPT Variante, da gibt es halt recht schnell einen Überlauf.
Nee, das ist mir als erstes in den Sinn gekommen.
Bei Programmieraufgaben frage ich ChatGPT schon lange nicht mehr. Höchstens noch zu bash-scripts.
Da ich kein Assembler kann, habe ich es in C gepostet.

X×3/4=75% von X ... das braucht einen größeren Wertebereich, ist aber ausreichend genau bei Ganzzahlen und kommt mit Addition und Schieben aus.

X/4×3=75% von X ... wäre mir zu ungenau (in BASIC), aber durch den kleinen Wertebereich besser für 8-Bit-Assembler.

Hmm ((X<<1)+X)>>2 geht doch ...

Geht dann nicht auch ((X>>1)+X)>>1 ? Aber das ist es bestimmt, was ganz oben schon in Assembler steht, oder?

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

also oben steh im kürzesten Code folgendes:

Nimm den Wert und teile ihn durch 2 (Befehl LSR) = 50%
Addiere dann mit dem Ursprungswert (100%+50% = 150%)
Teile wieder durch 2 (Befehl ROR) = 75%

Benutzeravatar
atarixle
Beiträge: 381
Registriert: 18.06.2021 21:19
Has thanked: 39 times
Been thanked: 73 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von atarixle »

Hab mir gerade nochmal den Assemnlercode ganz oben durchgelesen, es ist genau der gleiche Gedankengang wie in meinem Post. Nur ohne KI Power

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: 75% - Wert einer Zahl

Beitrag von Dr. Irata »

Dr. Irata hat geschrieben:
31.05.2025 20:21
also oben steh im kürzesten Code folgendes:

Nimm den Wert und teile ihn durch 2 (Befehl LSR) = 50%
Addiere dann mit dem Ursprungswert (100%+50% = 150%)
Teile wieder durch 2 (Befehl ROR) = 75%
also das ist ohne KI Power und kürzer als die von der KI

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast