Выполните итерации через все возможные значения с плавающей точкой

Как я могу перечислить все возможные значения типа данных с плавающей точкой? Я могу сделать это использование объединения в C или C++, но это будет портативно?

Как это может быть сделано на других языках? JavaScript?

Позвольте нам просто предположить, что я использую это повторение для отображения theta кому: sin(theta).

5
задан Agnel Kurian 21 April 2010 в 09:05
поделиться

4 ответа

Как я могу перечислить все возможные значения типа данных с плавающей запятой?

Посредством битовой перестановки IEEE -754 представление вашего значения с плавающей запятой, для числа с плавающей запятой вам нужно 2 ^ 32 различных представления, предполагая, что 4 байта на одно значение с плавающей запятой потребуют 16 ГБ памяти.

Я предполагаю, что вам нужна таблица поиска для синусоидальной функции, просто выполните цикл от 0 до 2 * PI с шагом требуемой точности.

2
ответ дан 14 December 2019 в 04:33
поделиться

Я не могу придумать переносимый способ сделать это. Но с учетом 64-битного представления (стандартный IEEE double) и предположения, что для генерации одного значения потребуется одна наносекунда, для генерации всех возможных значений потребуется более 500 лет. Так что у вас есть достаточно времени, чтобы придумать алгоритм :) ...

0
ответ дан 14 December 2019 в 04:33
поделиться

Взгляните на этого человека страницы для nextafter () и nextafterf (). Они позволяют переходить от числа с плавающей запятой к следующему ближайшему. Вы можете использовать один из них для посещения каждого номера FP по порядку.

5
ответ дан 14 December 2019 в 04:33
поделиться

Подход объединения не совсем переносим. Это зависит от размера используемых вами типов. (Если sizeof (your_fp_type)> sizeof (your_int_type), вы не сможете выполнить итерацию по всему диапазону, даже если бы у вас было время.)

В любом случае, поймите, что возможные значения с плавающей запятой не являются не распределяются равномерно по ассортименту любого выбранного вами типа. Разница между значениями увеличивается по мере удаления от 0. Учитывая это, и время, необходимое для создания такого списка, и тот факт, что у вас даже недостаточно места на HD для представления всех возможных двойников (я гарантирую вы этого не сделаете!), не говоря уже об оперативной памяти ... Я сомневаюсь в ценности создания такого списка. Поиск значения займет больше времени, чем просто выполнение расчета.

1
ответ дан 14 December 2019 в 04:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: