avva: (Default)
[personal profile] avva
Смешной баг. Примитивная хэш-функция берёт строку и в цикле умножает текущее значение хэша на 33 и прибавляет числовое значение следующего символа в строке. В конце берёт остаток от деления на кол-во слотов в таблице. Всё хорошо, но когда строка оказалась достаточно длинной, значение хэша вышло за пределы 2^32 и не вернулось к нулю, а было переведено слишком умным Perl'ом в тип с плавающей точкой. Который при попытке поделить его с остатком исправно давал 0.

Date: 2004-06-08 01:21 pm (UTC)
From: [identity profile] ex-ilyavinar899.livejournal.com
Пёрл рулит!

Date: 2004-06-08 01:27 pm (UTC)
From: [identity profile] lazha.livejournal.com
Оххх, напомнил, Авва.
Мне ж надо побыстрячку перл выучить. И сунуться куда его просят.
А я C(теоретически) и PHP

Date: 2004-06-09 12:52 am (UTC)
From: [identity profile] xen0n.livejournal.com
Когда "супергуру" той фирмы, где я работал, узнал, что я не владею перлом, он начал настоятельно агитировать меня. Кончилось на том, что я сказал: "Ладно, хочу учить. Где взять доку?"
Ответ был: "Заходишь на гугль, даешь запрос \"Перл за один день\" и смотришь результаты".

Я так и сделал. Первая ссылка была "Перл за 10 минут". Вот в том объеме я и познал перл. :-)

Date: 2004-06-09 12:57 am (UTC)
From: [identity profile] lazha.livejournal.com
сеньксь :))))))

Date: 2004-06-08 01:36 pm (UTC)
From: [identity profile] uniqs.livejournal.com
А что, в перле нет 64-bit integer type ?

Date: 2004-06-08 01:55 pm (UTC)
From: [identity profile] avva.livejournal.com
Смотря где он скомпилирован, очевидно.
А может, это 64 бита переполнились, я не уверен, на самом деле - не подсчитывал специально.

Есть, начиная с 5.6

Date: 2004-06-08 02:54 pm (UTC)
From: [personal profile] alll
Но 5.6 и выше есть далеко не везде. :)

Date: 2004-06-08 02:54 pm (UTC)
From: [identity profile] cmm.livejournal.com
зато там строки самые шырокие в мире.

Date: 2004-06-09 02:33 pm (UTC)
From: [identity profile] photon.livejournal.com
А что, если 64 бит, то не переполнится никогда?

Date: 2004-06-08 05:11 pm (UTC)
From: [identity profile] olegs.livejournal.com
вечно эта плавающая точка в перле делает проблемы. Но чтоб такие :))))

однако

Date: 2004-06-08 06:17 pm (UTC)
From: [personal profile] alll
если проверять на скорую руку, плавающая точка здесь не очень-то и при чем:

[al@al al]$ perl -e 'print 1.00000000000000000000000001e26%3,"\n"'
0
[al@al al]$ perl -e 'print 1.00000000000000000000000001e25%3,"\n"'
1

Похоже, проблемы у операции деления по модулю.

Date: 2004-06-08 07:03 pm (UTC)
From: [identity profile] avva.livejournal.com
Да она просто возвращает неопределённый результат в случае аргумента с плавающей точкой, думаю.

У неё вообще нет смысла тогда.

Не совсем так

Date: 2004-06-08 08:39 pm (UTC)
From: [personal profile] alll
Вот операция с плавающей точкой:
print 4.001e2%3;

Она у меня возвращает 1:
[al@al -work]$ perl -e 'print 4.001e2%3,"\n";'
1

Причем и на Perl 5.8.4 и на Perl 5.005_03

December 2025

S M T W T F S
  123 4 56
78 9 10 11 1213
1415 1617181920
21 22 23 24 2526 27
2829 30 31   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 01:39 am
Powered by Dreamwidth Studios