2013-04-03 1 views
0

У меня есть указатель на строку в C, который имеет данные bigint.Работа с двойным типом данных работает на окнах, но не на linux

например 9223372036854775807 т.е. 2^63

Я хотел бросить это в два раз, но, как вы знаете, двуспальный доступных для хранения в дробной части остальных бит discarded.so вышеупомянутого числа, которое очень 15/16 цифры большой будет отлит до 9.22337203685476E+18 т.е. 922337203685476000.

Это позволяет сравнить исходное значение и несоответствие значений отливки. Это обычно происходит на платформе Linux. Дело в том, почему этого не происходит в Windows?

Является ли он зависимым от компилятора или что-то, что мне неизвестно. ?

ответ

0

Это значение 2^63 - 1, которое не может быть точно представлено с помощью double. Ближайшее значение, которое может быть представлено, - 2^63. И это то, что вы получаете, если используете, например. sscanf или atof:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) { 
    const char *str = "9223372036854775807"; 
    double d; 
    double e; 
    sscanf(str, "%lf", &d); 
    e = atof(str); 
    printf("%f\n", d); // 9223372036854775808.000000 
    printf("%f\n", e); // 9223372036854775808.000000 
} 

См http://ideone.com/zz2NIF.

+0

Я согласен с тем, что число не может быть представлено двойным, но когда сравнение его в Windows является успешным, а в Linux - провалом? – user2239409

Смежные вопросы