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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнеиие двух float, ... 
:(
    Опции темы
pablo
Дата 27.6.2005, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



слушайте а как вам такой способ:

т.к float - 6 байтов, то первые 2 байта наверное идут под ехпоненту, остальные 4 под мантиссу.

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

Это только теоретическое предположение.


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
comcon1
Дата 27.6.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

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



в смысле с конца по битикам?? и чем это лучше, чем просто вычитать и сравнивать??


--------------------
PM MAIL   Вверх
ManiaK
Дата 27.6.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Для определения, что больше, а что - меньше, круче чем вычитанием для общего случая никак не сделаешь. По крайней мере, с банальной математической точки зрения я не вижу альтернативы...
PM MAIL WWW   Вверх
B2_Russia
Дата 27.6.2005, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

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



ваще проблемы нету - вся эта хрень
на первом занянии по ЧМам излагается..

float - маздай!!!
юзайте double !


Это сообщение отредактировал(а) B2_Russia - 27.6.2005, 15:25
PM WWW ICQ   Вверх
Earnest
Дата 27.6.2005, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Цитата(pablo @ 27.6.2005, 14:35)
т.к float - 6 байтов, то первые 2 байта наверное идут под ехпоненту, остальные 4 под мантиссу

В каком это компиляторе размер float составляет 6 байтов? До сих пор была уверена, что размер float == 4 байта, по крайней мере в VC и в Borland C.
Может, я от жизни отстала? smile



--------------------
...
PM   Вверх
Mayk
Дата 27.6.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Ну насчет float Earnest права, sizeof(float) = 4.
А вот sizeof(double)=8. sizeof(long double)=80([offtop]бах, это случаем не variant из vb?[/offtop])
А вот про 48 битов упоминается в SUS2(SUS3 под рукой нет, но там кажется то же самое есть), например здесь:

Цитата

The Single UNIX ® Specification, Version 2
Copyright © 1997 The Open Group

--------------------------------------------------------------------------------

NAME
drand48, erand48, jrand48, lcong48, lrand48, mrand48, nrand48, seed48, srand48 - generate uniformly distributed pseudo-random numbers

SYNOPSIS


#include <stdlib.h>

double drand48(void);
double erand48(unsigned short int xsubi[3]);
....skip....

DESCRIPTION
This family of functions generates pseudo-random numbers using a linear congruential algorithm and 48-bit integer arithmetic.
The drand48() and erand48() functions return non-negative, double-precision, floating-point values, uniformly distributed over the interval [0.0 , 1.0].
....skip....


Однако хочется сказать,что наши родимые FPU оперируют только 32 битными, 64 битными и 80 битными типами.
Если кому-то интересно про float'ы и с чем их едят, то читаем IEEE 754, IEEE 854, RFC 1832...

Но там про 48 тоже молчок.

Это сообщение отредактировал(а) Mayk - 27.6.2005, 16:58


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Дрон
Дата 27.6.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


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

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



Ну посмешили, ребята!!! smile smile smile smile smile smile smile

Цитата(Mayk @ 27.6.2005, 17:57)
sizeof(long double)=80

sizeof(long double) = 10

Цитата(B2_Russia @ 27.6.2005, 16:23)
юзайте double !

А разницы?
Точность-то всё равно ограничена.

gepard
Цитата(gepard @ 20.6.2005, 09:42)
abs(0.5 - (- 0.5)) <= 0.00001 - никак не пойдёт
fabs(-0.5 - 0.5) <= 0.00001 - Тоже не покатит.

Чем тебе это не нравится?

Это сообщение отредактировал(а) Дрон - 27.6.2005, 17:11


--------------------
Да. Именно так.
PM   Вверх
Mayk
Дата 27.6.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Дрон
Тьфу. Имелись в виду биты smile


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
pablo
Дата 27.6.2005, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 12.2.2005
Где: Вильнюс, Литва

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



Ошибся я чуток, точнее просто забыл, но это не главное. Я просто хотел предложить вам способ сравнение чисел с плавающей точкой и мне интерено ваше мнение.
Добавлено @ 00:04
Кстати при вычитании, не отбрасывается ли точность т.е если сравнивать такие два числа 0.5 и 0.50001 не покажутся ли они одинаковые ?


--------------------
Первый блин всегда похож на сферу, иногда бывает и куб.
PM MAIL ICQ   Вверх
Mayk
Дата 28.6.2005, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

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



Цитата(pablo @ 27.6.2005, 23:59)
0.5 и 0.50001 не покажутся ли они одинаковые ?

Так в том то и вся соль, чтоб они были одинаковыми.
Чтоб не показались одинаковыми надо использовать встроенный bool operator == (float, float).
Есть еще такой прикол что одно и то же число можно записать несколькими способами.
Например 0,1 = 1 * 10^(-1) = 10 * 10^(-2).
(разумеется во флотах комп оперирует 2оичной арифметикой)




Это сообщение отредактировал(а) Mayk - 28.6.2005, 09:22


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Adil'
Дата 28.6.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Mayk @ 28.6.2005, 09:19)
Есть еще такой прикол что одно и то же число можно записать несколькими способами.
Например 0,1 = 1 * 10^(-1) = 10 * 10^(-2).
(разумеется во флотах комп оперирует 2оичной арифметикой)

Комп всегда хранит плавающие числа в нормализованном виде - если, как в этом примере, в десятичном виде - то как 1 * 10^(-1)


--------------------
Удачи
PM MAIL WWW   Вверх
yaja
Дата 28.6.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



возможно я неправ, но одно и тоже число(вещественное, типа float, double...) может иметь одно и тоже значение, но разно представление в памяти (разную последовательность бит), а встроенный bool operator == (float, float) сравнивает побитово...
поэтому если нужно сравнить два чила на равенство, то пишут fabs(x - y) < EPSILON
эту запись встречал во всех смотренных мною проектах (не просто маленьких программах, а в проектах smile ), никакого другого способа не встречал ине слышал smile
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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