Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> float или double ? Нужен ли float.. 
:(
    Опции темы
hoz
Дата 13.7.2013, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



  В С++ имеется тип переменных как float так и double. Переменные типа double могут хранить значения на много больше ежели переменные типа float, и с большей точностью.
 Возник вопрос. Зачем тогда нужен тип float вообще?
PM MAIL   Вверх
volatile
Дата 13.7.2013, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(hoz @  13.7.2013,  20:48 Найти цитируемый пост)
Зачем тогда нужен тип float вообще? 

Места в 2 раза меньше занимает.

PM MAIL   Вверх
hoz
Дата 13.7.2013, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Цитата(volatile @  13.7.2013,  22:37 Найти цитируемый пост)
Места в 2 раза меньше занимает.

А где об этом говорится?  вообще. До какого значения можно использовать float ?
PM MAIL   Вверх
Cheloveck
Дата 13.7.2013, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Цитата(volatile @  13.7.2013,  23:37 Найти цитируемый пост)
Места в 2 раза меньше занимает.

Боюсь, что это не совсем так.

Цитата(hoz @  13.7.2013,  23:44 Найти цитируемый пост)
А где об этом говорится?  вообще. До какого значения можно использовать float ? 

В любой версии стандарта. Вот первый попавшийся в гугле http://www.open-std.org/jtc1/sc22/wg21/doc.../2005/n1905.pdf
Цитата

There are three floating point types: float, double, and long double. The type double provides at least as much
 precision as float, and the type long double provides at least as much precision as double. The set of values of the
type float is a subset of the set of values of the type double; the set of values of the type double is a subset of the set
of values of the type long double. The value representation of floating-point types is implementation-defined. Integral
   and floating types are collectively called arithmetic types. Specializations of the standard template std::numeric_-
    limits (18.2) shall specify the maximum and minimum values of each arithmetic type for an implementation.






--------------------
user posted image
PM Jabber   Вверх
volatile
Дата 13.7.2013, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Cheloveck @  13.7.2013,  22:52 Найти цитируемый пост)
Боюсь, что это не совсем так.

ну само имя double - что-то да значит  (смотрите перевод, если что... smile)
Ну и в реале, так оно и есть почти везде.

Цитата(hoz @  13.7.2013,  22:44 Найти цитируемый пост)
А где об этом говорится?  вообще. До какого значения можно использовать float ? 

в стандарте об этом ничего конктретного, как всегда не говорицца...  smile 
Так что смотреть стандарт - терять время.
Нужно смотреть доку компилятора
или чтоб не морочить долго голову, просто написать небольшую программку, и все сразу станет ясно.

Код

float:
sizeof = 4,  range = 1.17549e-38 ... 3.40282e+38

double
sizeof = 8,  range = 2.22507e-308 ... 1.79769e+308

http://codepad.org/byh5i3L2

Добавлено через 4 минуты и 19 секунд
В студии, кстати, точно также.
PM MAIL   Вверх
hoz
Дата 13.7.2013, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Cheloveck, так там написано же что мол каждый последующий из типов float - double - long double хранит значение переменных большей величины.
Множество значений float является подмножеством значений double, и множество значений double является подмножеством значений long double.
floatiing-point определяемые-реализацией... Это что за такое?
Integral и floating-типы называются более верно арифметическими типами.
Согласно специализации классов std::numeric_-limits 18.2 определены максимальные и минимальные значения каждого арифметического типа согласно их применения.
 Перешёл я в ту спецификацию 18.2 и не нашёл там рамок для соответствующих типов данных. Поясните, пожалуйста, как это правильно искать там?
PM MAIL   Вверх
volatile
Дата 14.7.2013, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



hoz, мою програку смотрели на codepad.org, там показано как использовать numeric_limits 
Сам стандарт, как я уже говорил, никаких границ не дает.
Все зависит от реализации компилятора.

PM MAIL   Вверх
mes
Дата 14.7.2013, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hoz @  13.7.2013,  22:52 Найти цитируемый пост)
floatiing-point определяемые-реализацией... Это что за такое?

грубо означает что нужно смотреть не в стандарт языка, а в стандарт который выбрала реализация, например сюда : http://ru.wikipedia.org/wiki/IEEE_754-2008


--------------------
PM MAIL WWW   Вверх
volatile
Дата 14.7.2013, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(mes @  14.7.2013,  00:09 Найти цитируемый пост)
 http://ru.wikipedia.org/wiki/IEEE_754-2008 

Стрго говоря, (раз уж здесь все так офигенно стрго, как я погляжу).
Нужно сначала выяснить в той же доке компилятора, что он использует именно IEEE_754-2008 в качестве реализации плавющих типов.
Что вовсе не обязательно.
А уже потом, при положительном ответе, можно и смотреть туда, куда вы указали.

только сколько это все займет время у новичка интересно... smile 






PM MAIL   Вверх
mes
Дата 14.7.2013, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(volatile @  13.7.2013,  23:21 Найти цитируемый пост)
Что вовсе не обязательно.

да, правда что ли ? но простите, а я что написал ?? 
Цитата(mes @  13.7.2013,  23:09 Найти цитируемый пост)
 в стандарт который выбрала реализация, например

или опять упреки в софистике посыплятся ?



--------------------
PM MAIL WWW   Вверх
hoz
Дата 14.7.2013, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Цитата(volatile @  13.7.2013,  23:25 Найти цитируемый пост)
или чтоб не морочить долго голову, просто написать небольшую программку, и все сразу станет ясно.

Хм. Я пока что Ваш код не совсем понял, хотя с большего, конечно, логика проста. Но С++ изучаю пока что с нуля (после примитивного mql4), так что сложновато на данном этапе.
Вот, есть момент.
Код

sizeof = 4,  range = 1.17549e-38 ... 3.40282e+38

Переменная size указывает на количество символов в значении, верно?
А range, как видно диапазон. Тока вот что значит запись 1.17549e-38 не понимаю..
PM MAIL   Вверх
mes
Дата 14.7.2013, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(volatile @  13.7.2013,  23:21 Найти цитируемый пост)
только сколько это все займет время у новичка интересно.

как это соотносится с вопросом 

Цитата(hoz @  13.7.2013,  22:52 Найти цитируемый пост)
floatiing-point определяемые-реализацией... Это что за такое?

на который и был ответ ?  или Вы предлагаете кому то другому посмотреть доку компилятора новичка и определить нужный стандарт ? не пойму только кому...

Добавлено через 4 минуты и 4 секунды
Цитата(hoz @  13.7.2013,  23:37 Найти цитируемый пост)
Тока вот что значит запись 1.17549e-38 не понимаю.. 

https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%...%B8%D1%81%D1%8C



--------------------
PM MAIL WWW   Вверх
hoz
Дата 14.7.2013, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



Цитата(mes @  14.7.2013,  00:37 Найти цитируемый пост)
на который и был ответ ?  или Вы предлагаете кому то другому посмотреть доку компилятора новичка и определить нужный стандарт ? не пойму только кому...

Не предлагаю, я писал тот пост до того как volatile ответил.
 Но меня реально грузит всё это. Такое ощущение, что там всё спецом так запудрили. Лезть в доку компилятора я и не собирался. Раньше я даже не знал, что придётся...
PM MAIL   Вверх
mes
Дата 14.7.2013, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(hoz @  13.7.2013,  23:48 Найти цитируемый пост)
Не предлагаю

hoz,  smile  этот вопрос относился к автору цитаты, конкретнее говоря к volatile

Добавлено через 2 минуты и 10 секунд
Цитата(hoz @  13.7.2013,  23:48 Найти цитируемый пост)
 Такое ощущение, что там всё спецом так запудрили. 

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



--------------------
PM MAIL WWW   Вверх
hoz
Дата 14.7.2013, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 139
Регистрация: 27.6.2013

Репутация: нет
Всего: нет



 Так странно. Если:
Код

float:
sizeof = 4,  range = 1.17549e-38 ... 3.40282e+38

double
sizeof = 8,  range = 2.22507e-308 ... 1.79769e+308

Получается, что sizeof возвращает размер его операнда, а range согласно коду диапазоны макс. и мин. Но size=4, а у range размеры огромных пределах, я даже не представляю себе эти числа. Но там далеко не 4... (для float).
Как это понимать?

Это сообщение отредактировал(а) hoz - 14.7.2013, 01:13
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.