2012-03-09 11 views
9

Czy istnieje makro lub funkcja do skonstruowania float (double) z danego znaku, mantysy i wykładnika (wszystkie binarne lub dziesiętne), która zwraca poprawną liczbę zmiennoprzecinkową (podwójną) lub zwraca NaN, jeśli liczba określona przez dane wejściowe nie jest równa reprezentowalne jako float (double)?Makro lub funkcja do skonstruowania float (double) z danego znaku, mantysy i wykładnika?

+0

Nie znam żadnych standardowych makr lub funkcji, ale byłoby całkiem łatwo je stworzyć. Na przykład, jeśli twoja mantysa jest liczbą całkowitą ze znakiem, pomnóż to przez pow (podstawa, wykładnik). –

+0

Każda operacja matematyczna jest podejrzewana o zmianę wyniku, więc binarna reprezentacja wyniku nie będzie identyczna z podanymi składnikami. – mbaitoff

Odpowiedz

12

Funkcja, której szukasz, to ldexp.

+2

+1 http://pl.cppreference.com/w/cpp/numeric/math/ldexp – 111111

+1

Zauważ, że ldexp (1.0,1024) zwraca inf, a ldexp (1,0, -1075) zwróci 0.0 i ldexp (3.0, -1075) zaokrągli górną do ldexp (4,0, -1075) ... Nie są reprezentowalne (dokładnie), ale nie dostaniesz NaN. –

Powiązane problemy