Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.03.19;
Скачать: CL | DM;

Вниз

Сравнение Double   Найти похожие ветки 

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

Тип 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-07 00:03) [1]

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


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));
           }
       }


 
Kilkennycat ©   (2015-07-07 00:56) [2]


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

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


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

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


 
brother ©   (2015-07-07 04:31) [4]

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


 
MBo ©   (2015-07-07 05:31) [5]

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


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


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

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

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


 
brother ©   (2015-07-07 18:09) [7]

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

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


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


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

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


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


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


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


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


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

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2017.03.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
2-1436574544
Платинум
2015-07-11 03:29
2017.03.19
Посчитать 32-bit CRC


1-1349853892
mfender
2012-10-10 11:24
2017.03.19
Переменные из окна браузера


3-1312941974
ZAlex
2011-08-10 06:06
2017.03.19
Конвертация полей типа VarByteField


2-1436168887
Арт
2015-07-06 10:48
2017.03.19
Вопрос по базе Access


15-1458927964
эндсоувот
2016-03-25 20:46
2017.03.19
???