Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сравнение Double


Дмитрий С ©   (2015-07-06 22:55:00) 

Тип Double занимает 8 байт, int64 тоже. Пусть
a1: double;
a2: int64 absolute a1;
b1: double;
b2: int64 absolute b1;

Верно ли, что
если a1 > b1, то a2 > b2
если a1 < b1, то a2 < b2

Уточню, что double представлен в формате IEEE 754


Игорь Шевченко   (2015-07-08 10:25:00) [1]


> Все значения для индексирования представлены массивом байт.


В случае разработки "универсальных индексов" индексируемые значения приводятся к единому сравнибельному виду. И вот в этом виде уже участвуют в сравнении.


Дмитрий С   (2015-07-07 23:07:00) [2]


> Я сильно извиняюсь, а что, в одном индексе могут быть значения
> разных типов вперемешку ?

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


Игорь Шевченко   (2015-07-07 21:45:00) [3]


> Это нужно для построения универсального индекса.


Я сильно извиняюсь, а что, в одном индексе могут быть значения разных типов вперемешку ? Например, строки и double ?


Дмитрий С   (2015-07-07 19:21:00) [4]


> brother ©   (07.07.15 18:09) [7]

Можно, и так тоже храню. Назначение у типов разное.


brother   (2015-07-07 18:09:00) [5]

> Это нужно для построения универсального индекса.

почему нельзя хранить int?
0.1234
1234
?


Дмитрий С   (2015-07-07 09:23:00) [6]


> MBo ©   (07.07.15 05:31) [5]

Спасибо, то что нужно. Сам тоже к этому пришёл.

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


MBo   (2015-07-07 05:31:00) [7]

Вот тут в начале показан трюк для того, чтобы можно было сравнивать:
http://stereopsis.com/radix.html


brother   (2015-07-07 04:31:00) [8]

ROUND уже не помогает?


Германн   (2015-07-07 01:39:00) [9]

Удалено модератором
Примечание: Выражения выбираем


Kilkennycat   (2015-07-07 00:56:00) [10]


> Верно ли, что
> если a1 > b1, то a2 > b2
> если a1 < b1, то a2 < b2

это утверждение неверно независимо от типов, версии делфи, наличия программиста и электричества в розетке.


Дмитрий С   (2015-07-07 00:03:00) [11]

Почитав теория, а именно как хранится знак числа с плавающей точкой я сделал вывод, что для отрицательных значений предположение не верно.
Проверил - действительно.


Random random = new Random();
       while (true) {
           Double a = random.nextDouble() * random.nextInt(Integer.MAX_VALUE) * (random.nextBoolean() ? 1 : -1);
           Double b = random.nextDouble() * random.nextInt(Integer.MAX_VALUE) * (random.nextBoolean() ? 1 : -1);
           if ((a > b && Double.doubleToRawLongBits(a) < Double.doubleToRawLongBits(b)) || (a < b && Double.doubleToRawLongBits(a) > Double.doubleToRawLongBits(b))) {
               System.out.printf("%s %s // %d %d%n", a, b, Double.doubleToRawLongBits(a), Double.doubleToRawLongBits(b));
           }
       }


Наверх

Титульная страница Поиск, карта сайта Написать письмо