Biorąc pod uwagę double x
i zakładając, że leży on w [0,1]
. Załóżmy na przykład, że x = 0,3 binarnie (przechowywanie 10 miejsc po przecinku), jest przedstawiony jakoWyodrębnianie cyfr z elementu pływającego C++
x=0.0100110011...
że chce napisać kod C++, który wyodrębnić 10 cyfry widoczne po przecinku . Innymi słowy chcę wyodrębnić liczbę całkowitą (0100110011) _2.
Teraz jestem zupełnie nowy w bitowego przesunięcia i (naiwnego) rozwiązanie, które mam za problem jest następujący
int temp= (int) (x*(1<<10))
Następnie temp
binarnie będą mieć necesary 10 cyfr.
Czy to jest bezpieczny sposób na wykonanie powyższego procesu? ALBO czy istnieją bezpieczniejsze/bardziej poprawne sposoby na zrobienie tego?
Uwaga: Nie chcę, aby cyfry były wyodrębniane w postaci tablicy znaków. W szczególności chcę, aby liczba całkowita (LUB bez znaku liczby całkowitej) dla tego. Powodem tego jest to, że w generowaniu ośmiu punktów punkty w przestrzeni otrzymują klucze skrótów bazujące na ich pozycji nazwanej jako Morton Keys. Te klucze są zwykle przechowywane jako liczby całkowite. Po uzyskaniu kluczy integracyjnych dla wszystkich punktów są one następnie sortowane. Teoretycznie te klucze można uzyskać przez skalowanie współrzędnych do [0,1], wyodrębnianie bitów i przeplatanie ich.
10 cyfr binarnych lub cyfr dziesiętnych? –
Dlaczego nie wydrukować * całej * mantysy z tylu zerami, które są wymagane w razie potrzeby? –
@ Oli Charlesworth: Zobacz edycję. Wyjaśniłem moje pytanie. – smilingbuddha