Простые тесты для проверки конвертирования десятичной дроби в формат с плавающей точкой IEEE-754

[ Обновление: пост ещё актуален, но 3-я беседа с пояснениями уже опубликована ]

Перед следующей, 3-й беседой я бы хотел, чтобы Вы проверили то, как Ваш компилятор языка Си/Си++ осуществляет конвертирование числа в формат с плавающей точкой (одинарной — float — и двойной — double — точности). Я даю несложную программу с несколькими довольно простыми тестами. Попробуйте её скомпилировать и запустить.

Скачать файл (cpp).

Конечно, при попытке скомпилировать могут возникнуть проблемы в тех местах, где используется функция fprintf, но, я уверен, Вы найдёте возможность их разрешить. Я использовал Visual Studio 2015 для своей работы.

Если Вы запустите программу, она должна выполнить 8 тестов для чисел одинарной точности и 24 теста для чисел с двойной точность. В поток ошибок будут выведены результаты тестирования. Если увидите слово Error, значит где-то ошибка (номер теста будет указан). Знайте — это именно ошибка компилятора.

Программа просто выполняет побитовое сравнения того числа, который генерируется компилятором и правильного ответа, вшитого в код заранее. Например, когда компилятор видит число 9214843084008499.0, он должен преобразовать его в число с плавающей точкой, шестнадцатиричная запись которого в формате IEEE-754 будет иметь вид 43405e6cec57761a. Если компилятор сгенерирует что-то другое, Вы увидите сообщение об ошибке.

Мне очень интересно, найдётся ли кто-то у кого компилятор пройдёт все тесты (VS-2015 не проходит, как, впрочем GCC и ещё 2 известных компилятора). Сразу предупреждаю, это простые тесты, а ведь есть ещё сложные… Но о них в другой раз.

Может быть кто-то попробует взять тесты из исходного кода и проверить конвертирование на другом языке? Мне и это тоже будет интересно.

На всякий случай, если вдруг я ошибся, даю Вам ссылку на абсолютно точный online-конвертер, единственный такой правильный из всех, что я видел в сети. Воспользуйтесь им, если сомневаетесь. Я отвечаю, что он точный!