|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Konst_OneAntonariyПреобразование неявное. Jah loves you. это битовая операция, но никак не преобразование.Тогда я не понял при чем тут преобразование вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 14:56 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
да не причём =) просто фраза была у шокер.про про преобразование двоичное PS хороший топик получился ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 14:58 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
AntonariyТогда я не понял при чем тут преобразование вообще. Ну я имел ввиду функцию Bin$, которая преобразовывает число в строку с двоичным представлением. Но ее нет в VB, к сожалению (как и Oct$, Hex$...). Зато у тебя в итоге самый крутой вариант получился ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 14:59 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Я тут в фоне тестю в Excel и в wsh: Check = Value Mod 2 = 0 - both Check = (Input \ 2 = Input / 2) - both IsOdd - only Excel Check1 = Not Value And 1 - only Excel Индусский код не проверял, но думаю - both :) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 15:13 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Shocker.Pro, Если кто в ассемблере кумекает, можно вставки сделать. Как делать вставки смотреть тут . По идее всего-то надо проверить 0-вой бит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 15:26 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
AntonariyА, в смысле как вариант индусского кода? Ну да. Наверное, еще можно как-то через логарифм решить ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 15:26 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Ой, имя из предыдущего сообщения забыл убрать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2009, 15:27 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
В условии спрашивалось про число , но уважаемые неиндусы ;-) почему-то решили ограничиться диапазонами чисел Integer и Long, позабыв про Double. А так как операторы Mod , \ , And работают только с числами в диапазоне не более Long, т.е. от -2147483648 до 2147483647, то единственно корректное решение для чисел в VB как раз то, что якобы " вообще за гранью добра и зл а", которое привёл Igor Mitichev . Все остальные варианты сглючат. В этом легко убедиться на числах, например, 2147483650# (чётное) и 2147483651# (нечётное). Также корректно, но медленно сработают WorksheetFunction.IsOdd и WorksheetFunction.IsEven, которые упомянул _Boroda_ , но это применимо не к VB (см.запрос), а только к VBA Excel, причём, начиная с версии 2007. Функции определения чётности/нечетности удобнее записать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 06:00 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
А если нужно сделать полный аналог Excel-функций =ISEVEN() и =ISODD() из надстройки Analysis ToolPack, которые игнорируют дробную часть числа, тогда так: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 06:23 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
ZVI, Давайте-ка заглянем в Википедию Чётность в теории чисел — способность целого числа делиться без остатка на 2. То есть в вашем случае число не удовлетворяет сразу двум условиям определения - оно не целое и не делится без остатка на 2 (в любом случае) Я не знаю, откуда засунули в Вики это определение, но вы его оспариваете? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 10:40 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
В принципе ничто не запрещает double иметь целое значение, но я ни разу не встречал задачу, где было бы необходимо проверить на четность именно double. Как правило при использовании double разработчика интересует именно его способность иметь дробную часть. Так что рассуждения ZVI к реальности отношения не имеют. В конце концов Clng(dbl) никто не отменял и оно в любом случае быстрее Fix (тем более в количестве трех штук) с обвесами. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 11:24 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Ну моей у моей функции тоже нет ограничений связанных с Integer. Просто меняем тип входящей переменной на String. По идее можно вообще любое целое число проверять если его загнать в String. Sub test() MsgBox isOdd(2147483654#) End Sub Function isOdd(number As String) As Boolean Select Case Right(number, 1) Case 0, 2, 4, 6, 8 isOdd = True 'Чётное Case Else isOdd = False 'Нечётное End Select End Function ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 12:18 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Djon Player, Ваша функция нерабочая технически (число всегда будет нечетное) и неадекватная логически (попробуйте проверить число 0.2, когда исправите предыдущую ошибку). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 12:41 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
AntonariyВариант с Fix вообще за гранью добра и зла. Почему? Здесь рассматривались варианты с "\" и "mod". Но чем принципиальным они отличаются? MSDN собственно, раскрывает работу mod через fix. По сути то же самое относится и к "\". Другой вопрос, как оно там внутри реализовано... Может fix и будет работать чуть медленнее, но как это определить? MSDNВыражение a Mod b является эквивалентом для любой из следующих формул: a - (b * (a \ b)) a - (b * Fix(a / b)) То есть получается, что если мы используем mod, то VB для вычисления результата где-то там внутри себя все равно использует fix (или "\", но сдается мне, что она тоже в конце концов обратится к fix). Или я чего-то недопонимаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 13:13 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Igor MitichevПочему?Потому что во-первых Fix, во-вторых If, в-третьих целых три арифметических операции. Результат немного предсказуем. Код: 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.
Другой вопрос, как оно там внутри реализовано... Не столь важно, как это там реализовано, важнее то, что VB имеет тормоза при передаче параметров. А If медленнее Select case. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 13:40 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
AntonariyDjon Player, Ваша функция нерабочая технически (число всегда будет нечетное) и неадекватная логически (попробуйте проверить число 0.2, когда исправите предыдущую ошибку).На счёт нерабочая, не согласен. И чётность и нечётность показывает верно. А пример с 0.2 не корректен, т.к. 0.2. не является целым числом и проверять его чётность бессмысленно. Оно не является ни тем не другим. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 13:52 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Насчет ByVal беру свои слова назад, это видимо справедливо для строк (не помню уже, где я наблюдал резкий прирост производительности при переходе на ByRef), получилась прямо противоположная картина. А вернее каша. Результаты с ByRef: Check_Div 15,03125 Check_Mod 13,26563 Check_Fix 15,78125 Check_And 12,67188 Результаты с ByVal: Check_Div 14,5625 Check_Mod 12,98438 Check_Fix 15,42188 Check_And 13,64063 Обратите внимание, первые три способа от перехода на ByVal выиграли, а последний проиграл целую секунду! Я произвел несколько замеров, это результат последнего, картина везде одинаковая, так что сучайные флуктуации винды можно исключить. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:09 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Djon PlayerAntonariyDjon Player, Ваша функция нерабочая технически (число всегда будет нечетное) и неадекватная логически (попробуйте проверить число 0.2, когда исправите предыдущую ошибку).На счёт нерабочая, не согласен. И чётность и нечётность показывает верно. А пример с 0.2 не корректен, т.к. 0.2. не является целым числом и проверять его чётность бессмысленно. Оно не является ни тем не другим.На счет нерабочей да, я забыл, что строка приведется к числу, поэтому 2 = "2". А насчет логичности — вы же ее позиционируете как работающую со строками, а где гарантия, что в строке не будет, например, отрывок из Капитала? В случае с числовыми типами это гарантируется самим типом. Так что вашей функции не хватает проверки на валидность. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:15 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
А чтобы совсем закрыть этот вопрос, вот ее результат: isOdd 93,0625 Оставим ее индусам. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:20 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Antonariy На счет нерабочей да, я забыл, что строка приведется к числу, поэтому 2 = "2". А насчет логичности — вы же ее позиционируете как работающую со строками, а где гарантия, что в строке не будет, например, отрывок из Капитала? В случае с числовыми типами это гарантируется самим типом. Так что вашей функции не хватает проверки на валидность. В предыдущих примерах при использовании тех-же 0.2 результат будет так-же не верен (либо выдадут, что число чётно, либо что нечётно, а это в любом случае не правильно), но почему-то там про проверку валидности вы не упомянули. А валидность проверить не сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:21 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
AntonariyА чтобы совсем закрыть этот вопрос, вот ее результат: isOdd 93,0625 Оставим ее индусам. Jah loves you. Что медленно работает, согласен, но это и так было ожидаемо. У меня получились такие реузьтаты: Check 9,71875 Check1 7,890625 chek 10,75 isOdd 81,53125 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:25 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Djon PlayerВ предыдущих примерах при использовании тех-же 0.2 результат будет так-же не веренВ предыдущих примерах дробное число проверить вообще не получится потому что тип целочисленный, число будет округлено. Djon PlayerА валидность проверить не сложно.Угу, и затормозить тем самым до черепашьего состояния. Нет уж, велосипеды нам не нужны, а с квадратными колесами тем более :) Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:27 |
|
Четность\нечетность
|
|||
---|---|---|---|
#18+
Djon PlayerУ меня получились такие реузьтаты:Попробую угадать: Intel Core i5? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2009, 14:29 |
|
|
start [/forum/topic.php?fid=60&msg=36391455&tid=2155283]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 329ms |
total: | 493ms |
0 / 0 |