Wieviel Performance und RAM braucht was?
-
hmm vielen dank, eine frage noch:
wenn ich statt multiplikation
c=a*b
die addition in forschleife nehme
for( unsigned int i=0 ; i < a ; ++i) { c += b; }
ist es genau so schnell?
dass problem ist dass ich die zahl 0 in integerzyklus symbolisch als ganze positive zahl definieren will - also 0 = (die letzte zahl von integer), und die Null rausschmeisse die ich sowieso nicht gebrauchen kann
-
xBlackKnightx schrieb:
ist es genau so schnell?
Nur wenn der Compiler sehr klug ist.
-
[quote="xBlackKnightx"]wenn ich statt multiplikation
c=a*b
die addition in forschleife nehme
ist es genau so schnell?
[quote]
nein. bei *sehr* wenigen schleifendurchläufen könntest du vielleicht leicht schneller sein. bei vielen durchläufen bestimmt nicht mehr.dass problem ist dass ich die zahl 0 in integerzyklus symbolisch als ganze positive zahl definieren will - also 0 = (die letzte zahl von integer), und die Null rausschmeisse die ich sowieso nicht gebrauchen kann
das hab ich jetzt nicht verstanden.
-
[quote="volkard"][quote="xBlackKnightx"]wenn ich statt multiplikation
c=a*b
die addition in forschleife nehme
ist es genau so schnell?nein. bei *sehr* wenigen schleifendurchläufen könntest du vielleicht leicht schneller sein. bei vielen durchläufen bestimmt nicht mehr.
dass problem ist dass ich die zahl 0 in integerzyklus symbolisch als ganze positive zahl definieren will - also 0 = (die letzte zahl von integer), und die Null rausschmeisse die ich sowieso nicht gebrauchen kann
das hab ich jetzt nicht verstanden.
die Zahl 0 hat keine Funktion mit der division
von daher wäre 4 / 0 = error - was falsch wäre wenn die 0 als ganze positive zahl betrachtet wird?mal anders gesagt:
die Wertebereiche sind alles Zahlen, wie eine Uhr-Arimethik
Wenn ich short 65535 noch eine eins hinzuaddiere geht es wieder von vorn: die Null
so wäre short 65536er-Uhr-Arimethik.wenn ich jetzt 2 65536er-Uhrer-Arimethiken nehme: die erste zeigt auf 3 und die andere auf 456, und möchte die beiden uhren multiplizieren -> so muss 456 in der multiplikation 3 mal um 456 gedreht werden. und anders rum 456 mal um 3. die dritte uhr zeigt dann auf 1368
jetzt ein anderes beispiel:
wenn ich sie 0 mal 3 multipliziere, so kommt 0 raus. wenn 65536 * 3 wird es nur 3x ganz herumgedreht zeigt es wieder auf 65536 also die nullso weit so gut
so jetzt mal aufgepasst:
wenn die erste uhr auf 32768 zeigt und die andere auf NULL und die beiden dann dividiere, so kommt eine fehlermeldung raus was unlogisch wäre
denk daran dass die Null die 65536te Zahl ist, also:
32768 / 65536 = 0,5 wäreda spuckt also was
vielleicht sollte ich die division ganz vermeiden.
und etwas mehr praktizierendes machen