![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 16 Всего: 85 |
![]() --- Ребята хорош грузить новичка. Вы конечно все очень правы, особенно длинная цитата из стандарта Это напомнило мне старый анедот. ![]() Как-то летели Холмс с Ватсоном на воздушном шаре. И заснули. Просыпаются над какой-то незнакомой местностью, видят - внизу какой-то мужик коров пасет. Снизились они и спрашивают мужика: - Скажите, сэр, где мы находимся? - (хорошенько подумав) На воздушном шаре. - Спасибо, сэр! - и поднялись вверх. Холмс задумчиво говорит: - Интересная местность, Ватсон! Программист пасет коров! - Но, Холмс, с чего вы взяли, что он программист? - Элементарно, Ватсон! Во-первых, он ответил, хорошенько подумав. Во-вторых, его ответ - Абсолютно точен. Ну и в третьих - Абсолютно бесполезен! |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
> Получается, что sizeof возвращает размер его операнда, а range согласно коду диапазоны макс. и мин. Но size=4, а у range размеры огромных пределах
ИМХО для начала нужно разобраться хотя бы с целыми числами. Там такая же фигня. При size равном 1 байт range от 0 до 255. И ещё, смысл double не в хранении больших чисел, а в большой точности при хранении чисел. Кстати, на некоторых процессорах double вообще нет. Есть только float. Например, на некоторых GPU. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
имелось в виду "в большей" ? |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
> имелось в виду "в большей" ?
Ну... Я там обыгрывал "большие числа" vs "большая точность", но и так можно ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Wuffur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 22.7.2007 Репутация: нет Всего: нет |
1.17549*10^-38=1,9999 9259*2^-127=1, 1111 1111 1111 1111 1000 011*2^-127. Причем старшая 1 в мантиссу не пишется. Так?
Это сообщение отредактировал(а) Wuffur - 15.7.2013, 09:31 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Я думаю, что флоаты в первую очередь нужны для скорости. Одно дело вычислять ~7 знаков акртангенса для флоата, и совсем другое 14 знаков для дабла. Оно конечно зависит от реализации в процах, но по опыту даблы будут раз в 10 дольше вычисляться если не хуже. Поэтому графику считают флоатами, тем более что флоаты лучше оптимизируются SSE . Я бы сказал, что скорее даблы не нужны чем флоаты, но они безусловно нужны для научных вычислений где требуется сохранение точности.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Wuffur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 22.7.2007 Репутация: нет Всего: нет |
Зависит от задачи - когда для скорости, а когда, чтобы вместились в память. Если вы CUDA программист, то там производительность сравнима,
здесь: http://www.nvidia.com/object/tesla-servers.html пиковая производительность на кеплере. А здесь просто про floating point на CUDA^ https://developer.nvidia.com/sites/default/...ating-Point.pdf K20 Peak double precision floating point performance 1.17 Tflops Peak single precision floating point performance 3.52 Tflops PU Computing Applications Reservoir simulation, CAE (structural analysis), Molecular dynamics, Numerical analytics, Computational visualization (ray tracing) Вполне возможно, что если вам нужно отрисовывать сложную сцену, то без double не обойдешься. Это сообщение отредактировал(а) Wuffur - 15.7.2013, 09:55 |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Вопрос исторический и поэтому немного риторический.
Надо смотреть, как появлялись float и double. Смотреть аллюзии с fortran'ом, потому что первоначально он в основном использовался для научных расчётов, a C рассматривался как системный язык (точность нецелочисленных вычислений в fortran'е была побольше. PS. Как сейчас, не знаю.) А дальше уже идут вопросы переносимости кода. Стандарт языка, кажется, на то и стандарт языка, чтобы в нём не рассматривалась трендовая текущая ситуация с hardware и software, а важна универсальность. Даже до сих пор есть DJGPP, который компилит код под 386 процессором и, пусть и единичные, но у людей возникают задачи что-то написать и откомпилить, работающее даже на 286 процах. Не говоря про многообразие UNIX'оидных тачек. Добавлено через 8 минут
В большом ряде научных расчётов такая точность может оказаться недостаточной. Так что не грузите новичка, а расскажите ему так, как оно есть на самом деле. "Как к такой жизни пришли" и почему оно до сих пор так, а не по другому. Это сообщение отредактировал(а) akizelokro - 15.7.2013, 10:11 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
Wuffur |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 22.7.2007 Репутация: нет Всего: нет |
akizelokro,
А вот если я ему скажу, что на два это число делить можно, а на большее целое будет ноль - это будет ответ на вопрос? Может он сам додумает? С вашим ответом, что в DJGPP всё устроено как в 286 и 386 вряд ли понятнее станет. Я вот знаю, что сопроцессор для вычислений с плавающей точкой появился только на 386 DX-2 и там ни о каких double речи не шло. Просто Doom 2 быстрее стал идти. |
|||
|
||||
hoz |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Мда. Пользуюсь уже год как числами с запятой, а ничего про них не знал до этого момента
![]() В принципе, вы было сказано верно, double больше float по сайзу в байтах в 2 раза, но long double относительно double уже не в 2.. хотя значения его в диапазоне на порядок больше предшественника, как в нормализованном виде, так и в денормализованном виде. Есть пару моментов. 1. Ведь переменная у которой мантисса с порядком имеет значение 1,2·10−38 или 1,2·10−38 это уже 38 запятых в ту или иную сторону. Зачем больше? Как программист прикидывает всё-таки необходимость использования того или иного типа? Лично я не представляю, где можно использовать такие числа... с такой точностью. А выше и подавно. Очень интересно понять. 2. Тут сказано, что:
Это как понять? 3. Ещё там есть такое:
Разве может быть мантисса отрицательной? Ведь, если так, то вид:
Будет правильным? Это сообщение отредактировал(а) hoz - 15.7.2013, 15:10 |
||||||
|
|||||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет))) Это значит, что порядок числа может быть от -38 до +38, но вот число значащих цифр - всего 7-8 (у double - 15-16). А точнее? Может: -1.0... Нет. -0,1·e3 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
hoz |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Хм. Я так понял, Вы из той таблицы взяли? Для long double согласно той таблицы будет от 19-20 знаков.. Выходит, что нас интересует именно точность! Теперь понял. Я уже исправил в своём посте, вот что я имел ввиду:
Читал, читал.. но не очень понятно, что они имеют ввиду под терминами фиксированной и относительной точности. Хотя да. Верно. |
||||
|
|||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет, это довольно известные факты))) Да! Можете взглянуть на строение float ![]() Ну вот всё тоже самое))) Число бит под мантиссу фиксировано, значит, Вы можете, к примеру, различать числа x=1.0eN и y=1.000001eN (где N - какой-то порядок); а 1.0eN и 1.0000001eN уже не различаются (не хватает разрядности мантиссы и 0.0000001 отбрасывается). Поэтому (максимально достижимая) относительная точность
не зависит от порядка числа и зависит только от разрядности мантиссы. В то же абсолютная точность
просто совпадает с x*1e-6 и изменяется вместе с x (и его порядком). Это сообщение отредактировал(а) feodorv - 15.7.2013, 16:46 -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
hoz |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 27.6.2013 Репутация: нет Всего: нет |
Ничего там непонятно вообще, если честно. Думал что всё понятно, а как начал там читать, так затуманило. Наверное лучше оставить "как есть", ведь различия в применении типов переменных я выяснил, а дальше уже дебри.. Который пугают ![]() Во втором варианте, Вы имеете в виду, что там N-не порядок мантиссы, а множитель что-ли? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |