powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Производительность типов Double и Float
29 сообщений из 29, показаны все 2 страниц
Производительность типов Double и Float
    #39304567
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Возникла тема - (изначально связана с недостатками до типу Double) попытался обойти через тип Float.

Но при таком преобразовании значительно теряю производительность (функция интегрирована в базу Oracle)
Почему - поясните пожалуйста.
Код: java
1.
2.
3.
4.
5.
6.
	private static Double round(Double value,int count)
	{
		Double scale=Math.pow(10.0,count);
             //return (double) Math.signum(value)*Math.round(Math.abs(                             value)*scale  )/scale; - нормально работает
		return (double) Math.signum(value)*Math.round(Math.abs((float) (value.floatValue()*scale)))/scale; - здесь снижение скорости
	}



Заранее благодарен !
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304579
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Как минимум странное решение. То есть помимо того что было, вы вызываете дополнительный метод. ПОтом идёт умножение на Double с результатом Double, которое потом ещё и каститься к float. С чего бы вообще ему быть быстрее?
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304581
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Не спорю - что странное - возможно даже не нужное

Но почему такое падение производительности
по double работает 70 сек на 30 тыс. записей
при float работает более 1 часа на 30 тыс. записей

Менял только эту строку ....
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304585
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XМенял только эту строку ....
Или только думаете что это так.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304594
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поясните, зачем Вы это делаете? Что за "изначальный недостаток у типа double", которого нет у float?
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304605
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Тема старая

Причина и результат понятны - но как ее обойти для себе не решил ОСТАТОЧНО......
Вот и мучаюсь вдруг что получиться.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304606
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Так работает железо
Когда вы делаете приведение к float - оно (предположительно) вытягивается из сопроцессора, приводится к флоат с потерей точности, потом переводится в дабл - и грузится в сопроцессор. Видимо, это занимает значительное время.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304610
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Не - честно !
Проверял несколько раз, и был крайне удивлен такому падению скорости.
Не насколько разные типы, может ошибка в чем то другом, но как проверить ?
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304618
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokHOME_X,

Так работает железо
Когда вы делаете приведение к float - оно (предположительно) вытягивается из сопроцессора, приводится к флоат с потерей точности, потом переводится в дабл - и грузится в сопроцессор. Видимо, это занимает значительное время.

Т.е. Вы хотите сказать что она обращается к внешним типам ?
Вне базы ? Под OS WIN 7 особых тормозов не заметил....
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304620
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xзначительно теряю производительность (функция интегрирована в базу Oracle) Типы данных .
Например, потому, что float представляется как (и конвертируется в) numeric, а double - напрямую используется как binary_double.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304628
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XBlazkowicz,

Не - честно !
Проверял несколько раз, и был крайне удивлен такому падению скорости.
Не насколько разные типы, может ошибка в чем то другом, но как проверить ?

Надо смотреть что там конкретно исполняется на уровне байткода и даже после JIT. Потому как, есть шанс что там весь автобоксинг оптимизировался и осталась одна математика. А во втором случае ещё и куча боксинга\анбоксина сверху.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304629
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XLeonid Kudryavtsev,

Тема старая

Причина и результат понятны - но как ее обойти для себе не решил ОСТАТОЧНО......
Вот и мучаюсь вдруг что получиться.

Пример
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class Example {

	public static void main(String[] args) 
	{
      double d = (8493.00 - 1000.00)*0.145;
      System.out.println(round1(d,2));		  
		
	}
	
	private static Double round1(Double value,int count)
	{
		//int scale=(int) Math.pow(10,count);
		double scale=Math.pow(10.0,count);
		//float f = (float) (value.floatValue()*scale);
		//return (double) Math.round(f)/scale;
		float f = (float) (value.floatValue()*scale);
		//return (double) Math.round(f)/scale;
        double g = (double) Math.signum(value)*Math.round(Math.abs(                     value)*scale  )/scale;
        System.out.println(g);		  
        //return (double) Math.signum(value)*Math.round(Math.abs(                     value)*scale  )/scale;
		return (double) Math.signum(value)*Math.round(Math.abs(f))/scale;
		//return (double) Math.signum(value)*Math.round(Math.abs((float) (value.floatValue()*scale)))/scale;
	}
}



Результат
1086.48
1086.49
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304640
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovHOME_Xзначительно теряю производительность (функция интегрирована в базу Oracle) Типы данных .
Например, потому, что float представляется как (и конвертируется в) numeric, а double - напрямую используется как binary_double.


А применение типа oracle.sql.NUMBER. (он используется по ходу действия процедуры)
Мне что-то даст ?

Имею в виду
- совместимость с базой
- производительность
- читабельность кода

Уж очень не хочется абракатабру методов писать
a.multiply(b).divide(c).add(d.substract(e)).setScale(2,BigDecimal.ROUND_HALF_UP).toString();


Спасибо за подсказки
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304675
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XА применение типа oracle.sql.NUMBER. (он используется по ходу действия процедуры)

IMHO Это же обертка над BigDecimal.

JavaDocThe NUMBER class provides converisons between the Oracle Number (lnxnum_t) data type and Java types byte[], byte, short, integer, long, float, double, String, BigInteger. and BigDecimal.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304692
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X
Но при таком преобразовании значительно теряю производительность !


как удалось обнаружить значительное снижение производительности?
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304696
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivHOME_XНо при таком преобразовании значительно теряю производительность !


как удалось обнаружить значительное снижение производительности?

Запустил запрос ДО изменения -
Запустил запрос ПОСЛЕ изменения -

Изменение это ремирования или разремирования одной строки
(первоначальная функция)
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39304697
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevHOME_XА применение типа oracle.sql.NUMBER. (он используется по ходу действия процедуры)

IMHO Это же обертка над BigDecimal.

JavaDocThe NUMBER class provides converisons between the Oracle Number (lnxnum_t) data type and Java types byte[], byte, short, integer, long, float, double, String, BigInteger. and BigDecimal.


Понял - спасибо
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39305141
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xможет ошибка в чем то другом, но как проверить ?
нужно смотреть код, который выполняется.
https://wiki.openjdk.java.net/display/HotSpot/PrintAssembly
исхоники либы hsdis есть в jdk...

HOME_XТ.е. Вы хотите сказать что она обращается к внешним типам ?
Вне базы ? Под OS WIN 7 особых тормозов не заметил....
кто "она"?, к каким еще "внешним типам" и при чем тут база? у вас вопрос независим от базы!
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39305470
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokкто "она"?, к каким еще "внешним типам" и при чем тут база? у вас вопрос независим от базы!


На Jave писана процедура ("ОНА"), которая внедрена в базу данных Oracle
ОНА же (процедура) запускается из под классов SWING - сделан интерфейс для операционке WIN7

в операционке тормозов нет...
в базе вдруг возникают - почему и как отследить ?

Спасибо
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39305640
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько знаю, на х86 жава оперирует даблами. Даже если вы используете float - будет перевод в дабл. Очевидно, этот перевод занимает некоторое время.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306009
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_Xв операционке тормозов нет...
в базе вдруг возникают - почему и как отследить ?СпасибоДа завсегда пожалуйста ...
Общее правило - "непонятную проблему" должен решать профильный специалист.
"Отсюда с очевидностью следует", что АБД должен заняться своими прямыми должностными обязанностями.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306140
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни один АБД такой фигней заниматься не будет и правильно сделает.

Дебильная проблема высосанная из пальца. Почему дебильный код работает по дебильному? Какой код - так и работает.

Добавили кучу преобразований туда-обратно, где-то в недрах JIT compiler оно сглючило, теперь ищут решение никому не нужно проблемы.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306859
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНи один АБД такой фигней заниматься не будет и правильно сделает.Нет, неправильно.
Не АБД решать, какой код пишет разработчик, но показать этому разработчику в каком месте фигня - его право и обязанность.
Если, конечно, отсутствует специально обученный человек, занимающийся вопросами производительности.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306878
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не АБД решать, какой код пишет разработчик, но показать этому разработчику в каком месте фигня - его право и обязанность.

Место которое у автора "тормозит" и так с точно до строки известно. Его и искать не надо. Что еще должен сделать АБД ? Может SR на металинке создать - но нужно ли ))) ?

IMHO
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306882
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XДоброго дня господа !

Возникла тема - (изначально связана с недостатками до типу Double) попытался обойти через тип Float.


Я вижу три смысла использоват float.
1) Обеспечение бинарной совметимости с каким-то интерфейсом RPC где этот тип захардкоден.
2) Естественный констрейнт на диапазон. Или специфичный к float алгоритм кастингов или округлений.
3) Экономия памяти на массивах. Для машин с малым heap. Что это... мобила или android, или
любое другое устройство - ХЗ. Вобщем придумайте сами. И не просто хранение а интенсивное
использование всего массива часто и много.

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

Для случая функции которая интегрирована в БД Oracle. Надо разобраться зачем она там
есть-ли возможность перенести ее в контекст PLSQL машины. Как рекомендует господин
Кайт - следует придерживаться стека SQL->PLSQL->emb.Java->C++ во всех задачах
оптимизации и решать проблемы на том уровне где инструментарий позволяет их решать.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39306915
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Господа - спасибо !

Нашел тормоза - внутренные критерии класса.
связанные с переход Double на Float, т.е. снижение точности
Исправил - получил другую проблему
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39307248
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМесто которое у автора "тормозит" и так с точно до строки известноТолько неизвестно почему оно тормозит.
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39307360
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton3) Экономия памяти на массивах. Для машин с малым heap. Что это... мобила или android, или
любое другое устройство - ХЗ. Вобщем придумайте сами. И не просто хранение а интенсивное
использование всего массива часто и много.

Да много где полезна экономия.
Иногда хочется побольше поместить в кэше (1-2-3 уровня), иногда в ОЗУ (а hadoop когда дневная порция данных составляет 100Гб, а обрабатывать надо за 2 месяца- и не так повертишься)
...
Рейтинг: 0 / 0
Производительность типов Double и Float
    #39310038
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chabapokНасколько знаю, на х86 жава оперирует даблами. Даже если вы используете float - будет перевод в дабл. Очевидно, этот перевод занимает некоторое время.
Здравый смысл иногда подводит
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Производительность типов Double и Float
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]