Я работаю с двойными (64-битными), хранящимися в файле, печатая необработанные байты из представления C #. Например, десятичное число 0,95238095238095233 хранится в виде байтов «9e e7 79 9e e7 79 ee 3f» в шестнадцатеричном формате. Все работает как положено, я могу писать и читать, но я бы хотел сам понять это представление о двойнике.
Согласно документации C # https://docs.microsoft.com/en-us/dotnet/api/system.double?view=netframework-4.7.2#explicit-interface-implementations и википедии https://en.wikipedia.org/wiki/Double-precision_floating-point_format первый бит предположительно является знаком с 0 для положительного и 1 для отрицательного числа. Однако, независимо от того, в каком направлении я читаю свои байты, первый бит равен 1. Либо 9 = 1001, либо f = 1111. Я озадачен, поскольку 0,95 ... положительно.
В качестве двойной проверки следующий код Python также возвращает правильное десятичное число.
unpack('d', binascii.unhexlify("9ee7799ee779ee3f"))
Может кто-нибудь объяснить, как человек может прочитать эти байты и получить 0,95238095238095233?