Kostet ein cast signed <--> unsigned was?
-
Danke
-
anmerkung zu kingruedis Beitrag:
casts von float auf int bzw. umgekehrt kosten schon etwas.
es geht im prinzip darum: muss der Compiler die bits ändern, oder nur anders interpretieren. anders interpretieren ist gratis, ändern nicht.
-
Auf allen Maschinen, die ich kenn, kostet es nix, man kann aber nie allgemeine Aussagen machen. int -> long kostet z.B. schon was auf den meisten 64bittigen Maschinen. float -> double ist auf manchen Maschinen gratis (Alpha, x86), auf manchen nicht (MIPS).
-
wie sieht das eigentlich aus, wenn ich einen double bzw. float flooren will, ist da ein (int)-cast schneller als ein floor()??
-
todo schrieb:
wie sieht das eigentlich aus, wenn ich einen double bzw. float flooren will, ist da ein (int)-cast schneller als ein floor()??
Das ergebnis ist aber etwas unterschiedliches...
-
ich will nur "truncaten", das macht soweit ich weiß sowohl cer (int) cast, als auch floor (ok, floor liefert einen double bzw. float, während ich beim int-cast halt einen int habe den ich u.u. noch mal zum float casten muss...) ansonsten sehe ich da keinen unterschied...
-
Auf Intel-Maschinen ist beides sehr langsam.
-
alternative??
mein problem ist, dass ich den nachkomma-anteil (mantisse, wenn ich mich da beim begriff nicht irre) eines floats haben will:
float x = 2347.456734; float nachkomma_anteil1 = x - floorf(x); // einmal mit floor... float nachkomma_anteil2 = x - (int) x; // einmal mit einem cast...
geht das noch besser/kleiner/schneller?
-
Da kommst du bestimmt am schnellsten weg, wenn du dir die Bitrepraesentation des Floats anschaust und die Vorkommastellen von Hand killst?
Edit: Hmm, bei genauerer Ueberlegung wohl doch nicht.
-
hab mal was gefunden:
http://www.musicdsp.org/showone.php?id=48
sowas in der art müsste das auch sein, halt bloß angepasst... da gibts bestimmt auch einen anderen wert, denn man addieren, shiften usw. kann...
-
Nein das Kostet nichts, du darfst kostenlos von signed nach unsigned casten. Was für eine Frage...