![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сравнение 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));
}
}