Ben -1 veya 1.Java'da oturum açmanın en hızlı yolu?
kaçınmak Koşullamalar bir int
değeri olarak bir float
değerinin işaretini almak istiyorum her zaman hesap maliyeti azaltmada iyi bir fikirdir. daha kısaca
float a = ...;
int sign = a >> 31; //0 for pos, 1 for neg
sign = ~sign; //1 for pos, 0 for neg
sign = sign << 1; //2 for pos, 0 for neg
sign -= 1; //-1 for pos, 1 for neg -- perfect.
Veya:
int sign = (~(a >> 31) << 1) - 1;
- bu iyi bir yaklaşım gibi görünüyor mu Mesela Aklıma tek yön işareti almak için hızlı
bit-shift
kullanmak olacaktır? - Bu, tüm platformlar için, enderlik endişeleri (MSB'nin işareti olduğu gibi) göz önünde bulundurulacak mı?
int sign = (int) Math.signum(a); //1 cast for floating-points, 2 for Integer types
Ayrıca çoğu Numara uygulamaları bir sinyalnum yöntemi bu tür ilkel alıp bir int dönen var, yani ekstra performans için döküm önleyebilirsiniz: basitçe yok neden
Bunu bilmiyordum. Muhtemelen performans konusunda da haklısın. –
+1 * * optimize edilmiş ve NaN vb. Gibi durumları ele alabilir. – arshajii
Integer.signum(), Long.signum(), vb. Öyleyse, ilişkilendirilecek kişi türüne yayınlamak zorunda değilsiniz. –