LINUX.ORG.RU

float vs double (си)


0

0

Тупой вопрос: раз float короче double, то значит ли это, что операции с ним будут выполняться быстрее? Будет ли что-нибудь вроде
float a=1, b=2, c=3;
c=a*b/c;
выполняться медленнее в случае с double?

anonymous

нет - операции над ними будут выполнятся одинаково быстро ибо все равно при загрузке в FPU они пребразуются к одинаковому типу ..

если и выиграешь в случае с float то только за счет меньшей загрузки шины (при большом количестве вычислений) ..

lg ★★
()

Если ты пишешь на Си, не имея ввиду никакой конкретной платформы, то ты имеешь право предполагать, что float будет быстрее, чем double. Если точноси float достаточно, то лучше использовать именно его.

anonymous
()

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

Как правило (если грить о пентиумах и атлонах на 32 битах, стандартных платформах и соотвествующем гсс) дабл имеет длину 4 байта, и вся оптимизация рассчитана именно на на работу с даблом. Про 64 разяряда ничего не скажу.

Соотвественно флоат в лучшем случае будет не медленней. Преимущество флота (если он 16 бит) - меньше памяти уходит... то исть ты можешь выиграть на больших объемах которые обойдутся без свопа. Но точность падает... у нас все работают с даблом.

AIv ★★★★★
()
Ответ на: комментарий от anonymous

Не слушай юристов, cлушай lg. На реальном железе (на x86, по крайней мере ) операции над double и float выполняются с одинаковой скоростью.

anonymous
()
Ответ на: комментарий от anonymous

FPU есть 3 формата значений с п точкой - single (сишный float), double (сишный double) и extended - так вот при загрузке в FPU все эти форматы конвертятся в extended и только потом происходит вычисление, то есть и для float и для double будут производиться ОДНО И ТОЖЕ ВЫЧИСЛЕНИЕ, при выгрузке соответсвенно ты потеряешь точность как для float так и для double, для float в большей степени ..

а теперь цитата из 14-й главы AoA:

"Since the 80x87 FPUs and 80486 CPU always convert single and double precision values to extended precision, extended precision arithmetic is actually faster than single or double precision. Therefore, the expected performance benefit of using the smaller formats is not present on these chips. However, when designing the Pentium/586 CPU, Intel redesigned the built-in floating point unit to better compete with RISC chips. Most RISC chips support a native 64 bit double precision format which is faster than Intel's extended precision format. Therefore, Intel provided native 64 bit operations on the Pentium to better compete against the RISC chips. Therefore, the double precision format is the fastest on the Pentium and later chips."

lg ★★
()
Ответ на: комментарий от anonymous

> Если ты пишешь на Си, не имея ввиду никакой конкретной платформы, то ты имеешь право предполагать, что float будет быстрее, чем double. Если точноси float достаточно, то лучше использовать именно его.

в яблочко!

lg ★★
()
Ответ на: комментарий от lg

Онаним хотел сказать, что на каком-нибудь полудоисторическом RISC-e без матсопроцессора float м.б. быстрее

anonymous
()
24 августа 2005 г.
Ответ на: комментарий от anonymous

> Онаним хотел сказать, что на каком-нибудь полудоисторическом RISC-e без матсопроцессора float м.б. быстрее

..или на отнюдь не столь доисторическом ARM, кои в подавляющем своем большинстве без FPU.

// wbr

klalafuda ★☆☆
()
Ответ на: комментарий от anonymous

ага, поэтому и "в яблочко"

преддыдущее сообщение (3:52:05) я просто не на том сообщении кнопку ответить нажал :)

lg ★★
()
Ответ на: комментарий от AIv

2AIv

sizeof(double), sizeof(float) не пыталися дилать на "пентиумах и атлонах на 32 битах, стандартных платформах и соотвествующем гсс".

зачем нам неверный информаций говоришь, вах нэхорошо

anonymous
()

То есть, как я понял, на "обычном" компьютере (х86) я от использования "более компактных" типов данных никакого выигрыша в скорости получить не должен?

Это и int'ов касается? (скажем, вместо 'long long int' - 'char')

А может для критичных к скорости рассчетов еще какие типы данных есть? (я вот когда-то с allegro игрался - там был тип 'fixed', вроде считался быстрее 'float')

anonymous
()
Ответ на: комментарий от lg

> нет - операции над ними будут выполнятся одинаково быстро ибо все равно при загрузке в FPU они пребразуются к одинаковому типу ..

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

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>я вот когда-то с allegro игрался - там был тип 'fixed', вроде считался быстрее 'float'

Ага, т.к. он на самом деле целый. Хотя формат вещественных в какой-то степени позволяет проводить арифметику с ними как с целыми...

Fortran
()
Ответ на: комментарий от anonymous

>2AIv sizeof(double), sizeof(float) не пыталися дилать на "пентиумах и атлонах на 32 битах, стандартных платформах и соотвествующем гсс".

>зачем нам неверный информаций говоришь, вах нэхорошо

эээ... пробовал но давно, результат уже забыл:-) про то что флоат не длиннее дабла - это почти точно помню из стандарта:-) А что, у тебя получилось наоброт?

AIv ★★★★★
()
Ответ на: комментарий от AIv

>Как правило (если грить о пентиумах и атлонах на 32 битах, стандартных платформах и соотвествующем гсс) дабл имеет длину 4 байта (...)

Ой, кто энто же вам сказал, что double на ia32 имеет размер 4 байта. Ладно, посчитаем это за очепятку.

>Но точность падает...

И опять-таки, кто это вам сказал? Да, диапазон значений шире, причем значительно (в 10^270), однако точность - не всегда.

idLe
()
Ответ на: комментарий от idLe

> Да, диапазон значений шире, причем значительно (в 10^270), однако точность - не всегда.

что не всегда? мантисса у 64-битного плавающего не всегда больше чем у 32-битного? Или у числа с большей мантиссой точность не всегда больше? че за бред?

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.