Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Vyacheslav Ignatyuk                  2:5020/400     28 Oct 2000  22:38:41
 To : All
 Subject : Re: Помогите
 -------------------------------------------------------------------------------- 
 
 "Alex Sverdlin" <Alex.Sverdlin@p117.f1057.n5020.z2.fidonet.org> wrote in
 message news:972740563@p117.f1057.n5020.z2.ftn...
 
 > Hi, All!
 >
 > Как заставить пеpл считать выpажение в 32-битных целых? Хочу получить
 
 pезультат
 
 > умножения с пеpеполнением такой же, как в дpугих языках пpогpаммиpования.
 >
 > Пpимеp:
 > 0x7F000001 * 0x8088405 + 1
 > должно быть 2130706433, а perl выдает все, что угодно, но не это :(
 > пpобовал sprintf "%lu", ... - та же фигня...
 
 В общем, нормального решения не получиш. Бился я с этим в части вычисления
 хеширующей функции для ключей.
 Есть один выход (не считая Math::BigInt, который просто медленный, хотя это
 для тебя может быть и не критично).
 Вроде как перл сам в себе использует 32 битные целые. Для того, чтобы
 получить вычисление с переполнением,
 обрами свой блок прагмой use integer:
 
 use integer;
 Делай что-то там......
 no integer; (не обязательно - смотря что тебе надо дальше. Или если конец
 блока)
 
 Однако в этом случае все вычисления - знаковые, что может быть не то, что
 тебе надо - учитывай это.
 Для меня это было не критично, ибо использовались только битовые операции.
 В конце приводи все к uint32 через unpack pack, или так:  $result = 2**32 -
 $result if $result < 0
 Да, 2**32 - это константа, а не выражение - просто все знаки не помню ;-)
 Да, по опыту говорю, что все математические операции безумно медленны, так
 что решай сам - а насколько
 тебе это надо. Может лучше о XS подумать?
 
 Vyacheslav Ignatyuk
 
 > Помогите, плз, буду очень пpизнателен!
 >
 > WBR, Alex.
 >                                                         [underlings]
 -- 
 Отправлено через сервер Talk.Ru - http://www.talk.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.Ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Помогите   Alex Sverdlin   28 Oct 2000 13:35:02 
 Помогите   Maxim Y. Zinyakov   28 Oct 2000 18:57:44 
 Re: Помогите   Vyacheslav Ignatyuk   28 Oct 2000 22:38:41 
 Помогите   Ivan Frolcov   30 Oct 2000 15:47:24 
 Re: Помогите   Vyacheslav Ignatyuk   30 Oct 2000 21:07:46 
 Помогите   Alex Sverdlin   31 Oct 2000 00:47:04 
 Re: Помогите   Vyacheslav Ignatyuk   31 Oct 2000 01:32:40 
 Re: Помогите   Ivan Frolcov   31 Oct 2000 12:38:18 
 Re: Помогите   Vyacheslav Ignatyuk   31 Oct 2000 17:38:29 
 Помогите   Alex Sverdlin   31 Oct 2000 00:24:16 
Архивное /ru.perl/6488bdeda523.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional