Gerade oder ungerade Zahlen feststellen
remi_remeier hat Recht! Außerdem darf man nicht vergessen, das man Macros benutzt, man unterliegt also keinerlei Geschwindigkeisteinbußen bei der Performance (anders als bei Proceduren).
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
Mal so auf die schnelle.
Code: Alles auswählen
a.l=1
If (a/2)*2=a
Debug "Gerade"
Else
Debug "Ungerade"
EndIf
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
@NULL
Beachte aber, dass PB liefert
entgegen jeder Restklassenringtheorie...
Beachte aber, dass PB liefert
Code: Alles auswählen
-3%2 = -1
!UD2
- Froggerprogger
- Badmin
- Beiträge: 855
- Registriert: 08.09.2004 20:02
Ohje, schaut euch das mal an:
Is it a bug ? No, a feature!
[bla]
Bzgl. Restklassen:
'Eigentlich' nach Definition der Restklassenringe über "Faktorgruppe Z / nZ" (egal) wird eine Zahl z aus Z eindeutig dargestellt durch z = f*n + k für f in Z, festes n und 0 <= k < n und dann in die "Klasse" zu k gepackt.
Daher ist eigentlich z.B: 2 % 3 = 2, 1 % 3 = 1, 0 % 3 = 0, -1 % 3 = 2, -2 % 3 = 1, ...
[/bla]
Code: Alles auswählen
a.l = -3
Debug -3 % 2 ; liefert -1
Debug a % 2 ; liefert 1
[bla]
Bzgl. Restklassen:
'Eigentlich' nach Definition der Restklassenringe über "Faktorgruppe Z / nZ" (egal) wird eine Zahl z aus Z eindeutig dargestellt durch z = f*n + k für f in Z, festes n und 0 <= k < n und dann in die "Klasse" zu k gepackt.
Daher ist eigentlich z.B: 2 % 3 = 2, 1 % 3 = 1, 0 % 3 = 0, -1 % 3 = 2, -2 % 3 = 1, ...
[/bla]
!UD2
- NicTheQuick
- Ein Admin
- Beiträge: 8808
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Froggerproggers Methode wäre auch meine Idee. Man könnte IsEven
allerdings auch so abändern, was wahrscheinlich nichts am Speed ändern
würde:
allerdings auch so abändern, was wahrscheinlich nichts am Speed ändern
würde:
Code: Alles auswählen
Macro isOdd(number)
number & 1
EndMacro
Macro isEven(number)
(~number & 1)
EndMacro
For i = -15 To 15
Debug i
Debug isOdd(i)
Debug isEven(i)
Next
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
@NTQ:
Was bedeutet die Tilde in deinem Code?
Gr33tz
Tafkadasom2k5
Was bedeutet die Tilde in deinem Code?
Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Der schöne ASM-Befehl "TEST" lässt den Prüfling unversehrt (im Gegensatz zu fast allen anderen Beispielen hier; Operation gelungen, Patient tot
).
Gruss
Helle

Code: Alles auswählen
Procedure OddEven(number)
!xor eax,eax
!test byte[p.v_number],1
!jz even
!inc eax
!even:
ProcedureReturn
EndProcedure
For i = -15 To 15
Debug i
Debug OddEven(i)
Next
Helle
Wie wäre es denn mit zwei Zeilen Assembler?
Code: Alles auswählen
Procedure IsOdd(Value.L)
!MOV EAX,DWORD [p.v_Value]
!AND EAX,$00000001
ProcedureReturn
EndProcedure
For i = -3 To 7
Debug Str(i) + " => " + StrU(IsOdd(i), #Long)
Next i