Можно ли memset'ить float и double?

В финансовой области постоянно приходится иметь дело с ценами, а цены удобно держать как float или double. Также финансовой сфере много старого когда, написанного на С или Фортране.

А в мире языке С практика инициализации структур нулем через memset является весьма распространенной и в целом не самой плохой практикой.

Вопрос: а что, если в структуре есть поля типа double или float. Что будет, если поля этих типов будут тупо забиты нулями, каково будет значение этих полей?

Для начала я проверил у себя на Солярисе и в Visual Studio 9 - все вроде нормально. После memset‘а нулем и float и double тоже равны нулю.

Хотя в целом правильный ответ такой: если ваш компилятор гарантирует хранение вещественных чисел в форматe IEEE 754, то вы в безопасности. Если нет (стандарт языка не гарантирует, что должен использоваться именно IEEE 754), то могут быть неожиданности.


Оригинальный пост | Disclaimer

Комментарии