удваивать - PullRequest
       20

удваивать

1 голос
/ 17 февраля 2012

У меня есть приложение, в котором я ДОЛЖЕН хранить unsigned short данные в double параллельном векторе, чтобы можно было легко перемещать их.Всякий раз, когда мне действительно нужны данные, я возвращаю их к unsigned short.Я знаю, что мои данные, хотя и сохраненные в векторе double, находятся в диапазоне unsigned short, т. Е. Все сохраненные значения находятся между 0 и 2^16-1.

Вопрос в том, что с sizeof(double) = 8 и sizeof(unsigned short) = 2 может ли это привести к потере данных при приведении?Я знаю одну проблему: если данные немного изменяются в форме double, они могут быть округлены до другого числа, но сейчас это не мое дело.

спасибо

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вам не нужно разыгрывать, чтобы назначить short на double.Существует неявное преобразование между коротким и двойным.

double a;
short b = 42;

a = b;  // no cast, OK as there is an implicit conversion

Если вы используете 16-битную short и IEEE-754 двойную точность double, при преобразовании потеря точности не происходит.

Чтобы дать некоторую перспективу, в основном для одинарной точности float, первое положительное целое значение, которое не может быть представлено, - 16777217.Так что для 16-битных short и double у вас должно быть все в порядке;)

0 голосов
/ 17 февраля 2012

Если значения не превышают пределы беззнакового шорта, потери не будут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...