Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
1

Почему -1^i не считается, или в VBA это пишется по другому

29.06.2015, 15:40. Показов 1240. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Visual Basic
1
2
3
4
5
6
Sub vvv()
Dim i#
For i = 0 To 8
Debug.Print -1 ^ i
Next
End Sub
выдает все время -1
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2015, 15:40
Ответы с готовыми решениями:

TUpDown Increment, или как это сделать по другому
Прошу помощи в следующем вопросе: Есть TUpDown и ассоциированный с ним TEdit Основная проблема...

Почему не считается функция в программе, что нужно добавить или удалить?
Что нужно добавить в код,чтобы калькулятор решал функцию решал функцию \arcsin\,\frac{x}{a}+C...

Почему в однокритериальной оптимизации считается минимум для сопротивления, но не считается для тока?
В самом конце работы идёт однокритериальная оптимизация по мощности P2 для R2 и I. Надо сделать с...

VBA это миф или реальность в русской раскладке?
VBA это миф или реальность в русской раскладке?

11
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
29.06.2015, 15:45  [ТС] 2
скрин.
Миниатюры
Почему -1^i не считается, или в VBA это пишется по другому  
0
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
29.06.2015, 15:45 3
(-1)^i
2
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
29.06.2015, 15:48  [ТС] 4
такая мелочь Спасибо. Учтем.
0
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
29.06.2015, 16:14 5
Vlad999, другое дело, что возводить -1 в степень практически не нужно. Посмотри тут:
Программа для вычисления приведенной ниже функции
Найти сумму ряда
1
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
29.06.2015, 16:31  [ТС] 6
Казанский, Сенкс. Век живи - век учись.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
01.07.2015, 08:55 7
В циклах (-1)^i считать "в лоб" очень нерационально. Проще так:

Visual Basic
1
2
3
4
5
6
7
8
9
       ii=1
 
       for i=0 to n
 
           ii=-ii
 
           '...
 
       Next
А вот если нужно вычислить (-1)^i при произвольном i, то

Visual Basic
1
       ii=iif((i mod 2),1,-1)
3
323 / 49 / 28
Регистрация: 07.09.2014
Сообщений: 217
01.07.2015, 10:55 8
Либо - еще вариант для произвольного i:
Visual Basic
1
ii = 1 - 2*(i mod 2)
2
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.07.2015, 11:29 9
Лучший ответ Сообщение было отмечено Vlad999 как решение

Решение

Catstail, IIf - медленная функция. При вычислении степени (-1) от 0 до 10 она оказывается медленнее возведения в степень!
Лучше использовать однострочный оператор If.
Код тараканьих бегов
Visual Basic
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
42
43
44
Sub test()
Const N = 1000000
Dim ii As Long, i As Long, k As Long, t As Single
t = Timer
For i = 1 To N
  For k = 0 To 10
    ii = (-1) ^ k
  Next
Next
Debug.Print "(-1) ^ k", Timer - t
 
t = Timer
For i = 1 To N
  ii = -1
  For k = 0 To 10
    ii = -ii
  Next
Next
Debug.Print "ii = -ii", Timer - t
 
t = Timer
For i = 1 To N
  For k = 0 To 10
    ii = IIf(k Mod 2, -1, 1)
  Next
Next
Debug.Print "IIf", Timer - t
 
t = Timer
For i = 1 To N
  For k = 0 To 10
    If k Mod 2 Then ii = -1 Else ii = 1
  Next
Next
Debug.Print "If Then Else", Timer - t
 
t = Timer
For i = 1 To N
  For k = 0 To 10
    ii = 1 - 2 * (k Mod 2)
  Next
Next
Debug.Print "1-2*(k Mod 2)", Timer - t
End Sub
Результаты
Код
(-1) ^ k       2,875 
ii = -ii       0,234375 
IIf            2,9375 
If Then Else   0,484375 
1-2*(k Mod 2)  0,515625
5
323 / 49 / 28
Регистрация: 07.09.2014
Сообщений: 217
01.07.2015, 14:42 10
Воспользовался кодом товарища Казанский, для тестов, добавив еще пару методов. Чтобы не было расхождений с имеющимися результатами из-за разных конфигов железа - провел испытания по всем вариантам у себя на компе. Получилось следующее(хотя вариант ii = -ii считаю нелогичным для сравнения - его нельзя посчитать для любого случайного k):
Код
(-1) ^ k                     1,53125 
ii = -ii                     0,125 
IIf                          1,546875 
If Then Else                 0,265625 
1-2*(k Mod 2)                0,234375 
1-2*(k And 1)                0,203125 
-(k And 1) Or (Not k And 1)  0,234375
2
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
01.07.2015, 15:11 11
Устроили тут демагогию и оффтоп Вопрос был: "Почему -1^i не считается"
0
mihey1993
01.07.2015, 15:29     Почему -1^i не считается, или в VBA это пишется по другому
  #12

Не по теме:


SoftIce, как раз таки сообщение про оффтоп и есть оффтоп :P Вопрос был - почему не считается, мы дали развернутый ответ на тему как надо считать чтобы считалось, и мало того, что считалось, так еще и быстро :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2015, 15:29

Массив: Элемент считается равным другому, если его данные лежат в пределах некоего диапазона, сравнить массивы
Всем привет. Есть 2 массива данных, которые необходимо сравнить на степень подобия, подскажите...

Как в VBA пишется фильтр для поля ленточной формы?
Всем доброго времени суток! Кто знает, подскажите пожалуйста, как в VBA пишется фильтр для поля...

Считается ли это баном
Допустим ссылки на сайт размещаются а в ссылках текст совсем не соответсвующий тематике цитируемого...

Считается ли это линкопомойкой?
Считается ли это линкопомойкой? И возможен ли бан? Если да, то какую формулировку использовать...

Это не считается читерством?
https://cloud.mail.ru/public/90e180c1d27f/bandicam%202014-03-17%2020-58-29-893.avi

Я выполняю дефрагментацию, а пишется, что выполняется фрагментация. Ошибка ли это?
Я выполняю дефрагментацию, а пишет что выполняется фрагментация. Ошибка ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru