Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как бы изобразить на PL/SQL такую функцию... / 25 сообщений из 40, страница 1 из 2
07.04.2003, 11:18
    #32134446
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
..., которая, принимая в качестве аргумента целое положительное число, возвращает ближайшее к нему большее целое, являющееся степенью двойки?
...
Рейтинг: 0 / 0
07.04.2003, 11:47
    #32134483
Bagira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
По-моему так

Код: plaintext
1.
2.
3.
4.
5.
create or replace function a (nums number) return number is
nums2 number;
begin
nums2 := power( 2 ,ceil(sqrt(nums)));
return nums2;
end;
...
Рейтинг: 0 / 0
07.04.2003, 11:49
    #32134485
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
А прямым перебором не пробовал?
...
Рейтинг: 0 / 0
07.04.2003, 11:53
    #32134489
acidbaba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
FUNCTION    F1
  ( vI IN  number)
  RETURN  number IS
 i number;
BEGIN 
 i:= 1 ;
 loop 
  i:=i* 2 ;
  exit when i>vI;
 end loop;
 return i;
END
...
Рейтинг: 0 / 0
07.04.2003, 11:57
    #32134495
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
to Bagira: прокольчик
Код: plaintext
1.
2.
3.
4.
5.
6.
SQLWKS> select power( 2 ,ceil(sqrt( 4 ))) from dual;
POWER( 2 ,CE
 ----------
 
          4 
Выбрана  1  строка.
...
Рейтинг: 0 / 0
07.04.2003, 12:00
    #32134499
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Прямым перебором больно долго считать будет.
...
Рейтинг: 0 / 0
07.04.2003, 12:06
    #32134507
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
to acidbaba: Ну-ну. А если vi будут в основном большие числа и функция будет вызываться достаточно часто - представляю, что останется от Oracle....
...
Рейтинг: 0 / 0
07.04.2003, 12:11
    #32134514
Bagira
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
2 Scott Tiger - а чем Вас моя функция не устраивает? :) если я правильно поняла Вашу задачу - у меня тоже была такая и все чудесно работает уже больше года
...
Рейтинг: 0 / 0
07.04.2003, 12:12
    #32134517
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Можно нахадить логарифм от числа, а потом возводить 2 в степень "целая часть логарифма + 1"
...
Рейтинг: 0 / 0
07.04.2003, 12:13
    #32134519
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Как-то не очень работает, если честно:
Код: plaintext
1.
2.
3.
4.
5.
SQL> select power( 2 ,ceil(sqrt( 1023 ))) from dual;

POWER( 2 ,CEIL(SQRT( 1023 )))
 -------------------------
 
                4294967296 
...
Рейтинг: 0 / 0
07.04.2003, 12:14
    #32134520
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
сорри, нахОдить
...
Рейтинг: 0 / 0
07.04.2003, 12:15
    #32134522
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
"2 Scott Tiger - а чем Вас моя функция не устраивает? :) если я правильно поняла Вашу задачу - у меня тоже была такая и все чудесно работает уже больше года"

Она у тебя не правильно работает, неужели непонятно.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQLWKS> select power( 2 ,ceil(sqrt( 4 ))) from dual;
POWER( 2 ,CE
 ----------
 
          4 
Выбрана  1  строка.
SQLWKS> 
SQLWKS> 
SQLWKS> select power( 2 ,ceil(sqrt( 5 ))) from dual;
POWER( 2 ,CE
 ----------
 
          8 
Выбрана  1  строка.
SQLWKS> 


"ближайшее к 4 и 8 большее целое, являющееся степенью двойки" - это 9, а не 4 и 8.
...
Рейтинг: 0 / 0
07.04.2003, 12:18
    #32134527
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
softbuilder@inbox.ru, 9 никаким образом не является степенью двойки, а 4 и 8 - являются.
...
Рейтинг: 0 / 0
07.04.2003, 12:22
    #32134535
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
to Scott Tiger:
Может народ тебя неправильно понимает?
Давай уточним, что ты хочешь:

Есть целые числа 1, 2, 3, 4, 5,.......n
Чисал в степени 2 соответсвенно будут: 1, 4, 9, 16, ......n^2
Допустим на входе число 10 значит ближайшее 16.
Если 8 значит 9. итд.
Так или нет?
...
Рейтинг: 0 / 0
07.04.2003, 12:24
    #32134540
acidbaba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Можно таким мрачным запросом (если :vI заведомо меньше 1267650600228229401496703205376)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
select min(power( 2 ,(a.X+b.X))) from
(
 select  0  X from dual
 union
 select  1  from dual
 union
 select  2  from dual
 union
 select  3  from dual
 union
 select  4  from dual
 union
 select  5  from dual
 union
 select  6  from dual
 union
 select  7  from dual
 union
 select  8  from dual
 union
 select  9  from dual) a, 
 (
 select  0  X from dual
 union
 select  10  from dual
 union
 select  20  from dual
 union
 select  30  from dual
 union
 select  40  from dual
 union
 select  50  from dual
 union
 select  60  from dual
 union
 select  70  from dual
 union
 select  80  from dual
 union
 select  90  from dual) b
where power( 2 ,(a.X+b.X))>:vI
...
Рейтинг: 0 / 0
07.04.2003, 12:25
    #32134542
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
to softbuilder@inbox.ru:
ближайшее к 8 число, являющеечя степенью двойки имхо 8.
...
Рейтинг: 0 / 0
07.04.2003, 12:27
    #32134547
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Значит я неправильно понял. Ты имеешь ввиду?
2^0 - 1
2^1 - 2
2^3 - 8
2^4 - 16
...
Рейтинг: 0 / 0
07.04.2003, 12:28
    #32134549
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Есть целые числа 1, 2, 3, 4, 5,.......n
Чисал в степени 2 соответсвенно будут: 1, 4, 9, 16, ......n^2
Допустим на входе число 10 значит ближайшее 16.


Блин. Имеется в виду не n^2, а 2^n, т.е., 1, 2, 4, 8, 16, 32, ...
...
Рейтинг: 0 / 0
07.04.2003, 12:30
    #32134554
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Я полностью за твоё предыдущее высказывание, только там надо поменять 9 на 8.
...
Рейтинг: 0 / 0
07.04.2003, 12:31
    #32134555
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
2 Scott Tiger

Интересная задачка, вам нужно?

y / (y c N),(x<2^y), (x-2^y)-> min я правильно понял?
...
Рейтинг: 0 / 0
07.04.2003, 12:34
    #32134559
ламка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Сорри, глюканул. Тигер прав.
...
Рейтинг: 0 / 0
07.04.2003, 12:40
    #32134565
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Не пытайтесь сделать из меня математика Я умничать не буду, я пальцем покажу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
y=f(x);
f( 0 )= 1 ;
f( 1 )= 1 ;
f( 2 )= 2 ;
f( 3 )= 4 ;
f( 4 )= 4 ;
f( 5 )= 8 ;
...
f( 1023 )= 1024 ;
...

Ну и т.д. 

 0  <= x <  2 ^ 32 



Да, нужно условие откорректировать - "...возвращает ближайшее к нему большее или равное ему целое..."
...
Рейтинг: 0 / 0
07.04.2003, 12:41
    #32134566
acidbaba
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Tiger, чем тебя не устраивает мой запрос?
...
Рейтинг: 0 / 0
07.04.2003, 12:45
    #32134574
Scott Tiger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
Прям какие-то личные разборки пошли :)
Устраивает, хотя выглядит жутковато.
...
Рейтинг: 0 / 0
07.04.2003, 12:46
    #32134576
Ося
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как бы изобразить на PL/SQL такую функцию...
f= POWER(2,ROUND(LOG(X,2))) ? разве не это предлагали несколько постингов назад?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как бы изобразить на PL/SQL такую функцию... / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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