powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.4 Странная логика разработчиков :).
4 сообщений из 4, страница 1 из 1
ASE 12.5.4 Странная логика разработчиков :).
    #38288709
wtcat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, народ. Ковырялся в sp_helpdeviсe. Наткнулся на странную конструкцию (строки 555 - 569): floor(power(2.0,24)). То есть возводим 2 в степень 24, при этом заботимся о том, чтобы получить результат с плавающей точкой. После чего округляем до целого. Написав power(2,24) вроде бы получим то же самое. Зачем тогда лишняя команда? Теперь сижу и грущу - пытаюсь понять, это я дурак и чего-то недопонимаю, или это разработчики Sybase такие умники?
...
Рейтинг: 0 / 0
ASE 12.5.4 Странная логика разработчиков :).
    #38288756
wtcat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. В тех же строках кода используется переменная @offsetdiv, которая в начале процедуры рассчитывается как:
select @offsetdiv = power(2,24)
Как-то совсем странно...
...
Рейтинг: 0 / 0
ASE 12.5.4 Странная логика разработчиков :).
    #38288905
blzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращаемый тип при этом остается decimal, а integer в ASE 32битный который запросто переполнить.

Код: sql
1.
2.
3.
4.
	low  =  (((d.low / @offsetdiv) & 255) * floor(power(2.0,24)))
	       + vpn_low,
	high = (((d.high / @offsetdiv) & 255) * floor(power(2.0,24)))
	       + vpn_high


в данном случае 128*power(2,24) уже переполнит.
попробуйте создать 128 девайсов и выполнить "оптимизированный" запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
declare @offsetdiv integer
set @offsetdiv=power(2,24)
select 
	low  =  (((d.low / @offsetdiv) & 255) * power(2,24))
	       /* + vpn_low */, 
	high = (((d.high / @offsetdiv) & 255) * power(2,24))
	       /* + vpn_high */
from master.dbo.sysdevices d 
...
Рейтинг: 0 / 0
ASE 12.5.4 Странная логика разработчиков :).
    #38289463
wtcat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
blzz, идея, конечно, неплохая. Но, во-первых, power(2,24) переполнения не вызывает (проверено), а во-вторых, переменная @offsetdiv инициализируется именно как power(2,24) (смотри второй пост). Так что код вполне мог выглядеть так:

low = (((d.low / @offsetdiv) & 255) * @offsetdiv)
+ vpn_low,
high = (((d.high / @offsetdiv) & 255) * @offsetdiv)
+ vpn_high
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5.4 Странная логика разработчиков :).
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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