Зачем вам использовать float в double или double over long double? - программирование
Подтвердить что ты не робот

Зачем вам использовать float в double или double over long double?

Я все еще новичок в программировании, и у меня всегда есть больше вопросов, чем может ответить наша книга или интернет-поиск (если только я не пропустил что-то). Поэтому я заранее извиняюсь, если на это был дан ответ, но я не смог его найти.

Я понимаю, что float имеет меньший диапазон, чем двойной, что делает его менее точным, и, насколько я понимаю, длинный двойник еще точнее (?). Поэтому мой вопрос: почему вы хотите использовать переменную, которая является менее точной в первую очередь? Связано ли это с различными платформами, разными версиями ОС, разными компиляторами? Или есть конкретные моменты в программировании, где стратегически выгоднее использовать float над двойным/длинным двойным?

Спасибо всем!

4b9b3361

Ответ 1

Почти во всех процессорах "меньшие" числа с плавающей запятой принимают одинаковые или менее тактовые циклы. Иногда разница не очень большая (или ничего), в других случаях это может быть буквально вдвое больше циклов для double против float.

Конечно, память foot-print, которая влияет на использование кеша, также будет фактором. float занимает половину размера double, а long double еще больше.

Изменить: Еще один побочный эффект меньшего размера заключается в том, что расширения SIMD-расширения процессора (3DNow!, SSE, AVX в x86 и аналогичные расширения доступны в нескольких других архитектурах) могут работать только с float или могут принимать в два раза больше float по сравнению с double (и, насколько я знаю, никакие SIMD-инструкции не доступны для long double в любом процессоре). Таким образом, это может повысить производительность, если float используется против double, обрабатывая в два раза больше данных за один раз. Конец редактирования.

Итак, если 6-7 цифр точности достаточно для того, что вам нужно, и диапазон +/- 10 +/- 38 достаточен, тогда следует использовать float. Если вам нужно больше цифр в номере или в большем диапазоне, перейдите к double, и если этого недостаточно, используйте long double. Но для большинства вещей double должен быть вполне адекватным.

Очевидно, важность использования "правильного размера" становится более важной, когда у вас есть либо множество вычислений, либо много данных для работы - если есть 5 переменных, и вы просто используете их пару раз в программа, которая делает миллион других вещей, кого это волнует? Если вы делаете расчеты по динамике гидродинамики для того, насколько хорошо автомобиль Формулы 1 работает со скоростью 200 миль в час, то у вас, вероятно, есть несколько десятков миллионов точек данных для расчета, и каждый пункт данных нужно рассчитывать десятки раз в секунду для поездок автомобилей, то при использовании всего лишь нескольких тактовых циклов в каждом расчете будет проведено значительное симуляция.

Ответ 2

Существует две издержки использования float, очевидный из его ограниченного диапазона и точности и, что менее очевидно, более сложный анализ, который эти ограничения налагают.

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

Самое большое преимущество на многих процессорах - уменьшение объема памяти. Это приводит к увеличению числа номеров в строке кэша и увеличению пропускной способности памяти в пересчете числа в секунду. Любое усиление в производительности вычислений обычно относительно невелико - действительно, популярные процессоры выполняют всю арифметику с плавающей запятой в одном формате, который шире, чем двойной.

Лучше всего использовать double, если не соблюдены два условия - достаточно количества номеров для их объема памяти - значительная проблема с производительностью, и разработчики могут показать, что float достаточно точен.

Ответ 3

Основной принцип здесь - не использовать больше, чем вам нужно.

Первое соображение - использование памяти, вы, вероятно, поняли, что уже, если вы делаете только один двойник, неважно, но что, если вы создадите миллиард, чем вы использовали вдвое больше места в памяти, чем у вас тоже.

Далее используется процессор, я полагаю, что на многих процессорах, если вы используете более мелкие типы данных, он может выполнять форму потоковой передачи, когда он выполняет сразу несколько операций.

Таким образом, расширение этой части ответа инструкции SSE в основном это позволяет использовать упакованные данные для выполнения нескольких операций с плавающей запятой одновременно, что в случае идеализированного может удвоить скорость вашей программы.

Наконец, читаемость, когда кто-то читает ваш код, если вы используете float, они сразу поймут, что вы не переходите через определенное число. IMO иногда правильный номер точности просто будет лучше работать в коде.

Ответ 4

Вам может быть интересно увидеть ответ, размещенный здесь Должен ли я использовать double или float?

Но это сводится к объему памяти и количеству точности, необходимой для данной ситуации. В физическом движке вам может потребоваться больше информации о точности, поэтому было бы разумнее использовать двойной или длинный двойной.

Нижняя линия: Вы должны использовать столько точности, сколько потребуется для данного алгоритма

Ответ 5

Поплавок использует меньше памяти, чем двойной, поэтому, если вам не нужно, чтобы ваш номер был размером с double, вы также можете использовать float, так как он будет занимать меньше памяти.

Точно так же, как вы не использовали бы автобус, чтобы управлять собой и другом на пляже... вам было бы гораздо лучше ехать на двухместном автомобиле.

То же самое относится к двойному удвоению по длинному двойному... сохраняйте столько памяти, сколько вам понадобится. В противном случае с более сложным кодом вы рискуете использовать слишком много памяти и иметь процессы замедления или сбоя.