Сейчас 06:55:32 Четверг, 20 августа, 2026 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
[JASS] Альтернативный урок 3. Функции
BlackFoxДата: Воскресенье, 21 Апреля 2013, 23:19:57 | Сообщение # 51
3 уровень
Группа: Проверенные
Сообщений: 52
Награды: 0
Репутация: 25
Блокировки:
Мона, на уровне ассемблера?

Добавлено (21 Апреля 2013, 23:19:57)
---------------------------------------------
if then endif vs if then else endif

Код
function Test1 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if not false then
call BJDebugMsg(I2S(i))
endif
endloop
//809
endfunction
function Test2 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if false then
else
call BJDebugMsg(I2S(i))
endif
endloop
//811
endfunction
function Test3 takes nothing returns nothing
local integer i = 0
loop
set i = i + 1
if false>== false then
call BJDebugMsg(I2S(i))
endif
endloop
//803
endfunction


SirNikolas падёт в неравном бою с брутфорсом, Alice.
 

МонаДата: Вторник, 23 Апреля 2013, 20:34:40 | Сообщение # 52
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Duosora, ты где там?
 

DuosoraДата: Вторник, 23 Апреля 2013, 20:37:55 | Сообщение # 53
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Это были мои тесты.

Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

МонаДата: Вторник, 23 Апреля 2013, 20:41:00 | Сообщение # 54
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Да? И каков результат?

Добавлено (23 Апреля 2013, 20:41:00)
---------------------------------------------
Под какими выводами из тестов ты подпишешься?

 

Ty3uKДата: Вторник, 23 Апреля 2013, 20:44:16 | Сообщение # 55
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Не думаю, что тесты твои - ты расставляешь отступы всегда. :)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

DuosoraДата: Вторник, 23 Апреля 2013, 20:49:53 | Сообщение # 56
The cats never sleep...
Группа: Ветераны
Сообщений: 6734
Награды: 10
Репутация: 2161
Блокировки:
Ty3uK,
Это кое-чья редакция моих тестов. На Терноксе оригиналы. :)


Не зли других и сам не злись.
Мы - гости в этом мире.
И если что не так - смирись,
Будь поумнее - улыбнись,
Ведь в мире всё закономерно.
Зло, излучённое тобой,
К тебе вернётся непременно.
 

Ty3uKДата: Вторник, 23 Апреля 2013, 21:10:35 | Сообщение # 57
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Duosora, на терноксе в первом примере тоже отступов нет.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

МонаДата: Среда, 24 Апреля 2013, 20:18:18 | Сообщение # 58
1 уровень
Группа: Пользователи
Сообщений: 10
Награды: 0
Репутация: 0
Блокировки:
Ty3uK, это его тесты. Только он их не проводил, потому что
if false>== false then и if GetWidgetLife(u,UNIT_STATE_LIFE) > 0. then
ему не позволили.
А еще он таки купился на всю мою хню в этой теме. Он поверил, что количество итераций цикла, исчерпывающих лимит операций, показывают скорость выполнения тела цикла. Зря. Теперь наконец-то доказано, что Дуос - программист, слепо следующий чужим инструкциям.

На самом деле в #28 и #49 написано вранье, близкое к правде, и провокация. Сосчитав количество итераций, легко определить, на какое количество команд объектного кода распадается тело цикла. И только; это не производительность.

Чтобы определить скорость выполнения jass кода, в реальных условиях, со всеми кешами L1 L2 L3 L4, со всеми передергиваниями оси, не оттраханного гринморем вара, нужно: или засекать секундомером что-то на подобие этого
Код
call DisplayTimedTextToPlayer(Player(0),0,0,20,"start")
     call Sleep(0.1)
     loop
         set lIz = 0
         loop
             exitwhen lIz == 10000
             //
             set lIz = lIz +1
         endloop
         call Sleep(0.001)
         set lIIz = lIIz+ 1
         exitwhen lIIz == 1000
     endloop
     call DisplayTimedTextToPlayer(Player(0),0,0,20,"stop")

(можно Кингу пожелать),
или читать системное время через самописный инъект,
или считать количество тактов проца через самописный инъект.
Во всех трех случаях получается погрешность ~10%. Последний способ самый простой. В game.dll есть подпрограмма:
Код
.text:6F5277D0 sub_6F5277D0    proc near               ; CODE XREF: sub_6F527E90+83
.text:6F5277D0                 rdtsc
.text:6F5277D2                 retn
.text:6F5277D2 sub_6F5277D0    endp

она ничего не принимает, а возвращает младшие 32 бита от количества процессорных тактов, натикавших с последнего ресета. (старшие херятся в EDX)
Еще есть нативка
native GetAllyColorFilterState takes nothing returns integer
, проживающая по адресу 6F3B3A50h. Заменив с помощью HEX-редактора всего три байта(game.dll[v1.26a]:3d84c8h: 50h 3ah 3bh 6fh -> d0h 77h 52h 6fh), получаем самописный бенч.
Код
function Trig_B_Actions takes nothing returns nothing
     local integer lAz = 0
     set lAz = GetAllyColorFilterState()
//
     set lAz = GetAllyColorFilterState()-lAz
     call DisplayTextToPlayer(Player(0),0,0,I2S(lAz))
endfunction

Только поправку на вызов GetAllyColorFilterState не забыть бы.
У меня приведенный пример вывел: 1521, 1808, 1425, 1601, 1629, 1756, 1518, 1443, 1722, 1499, 1852, 1678(i7-2800K). Разброс, главным образом, обусловлен кешированием.
PS
if GetWidgetLife(u,UNIT_STATE_LIFE) > 0. then\n endif
if IsUnitType(u,UNIT_TYPE_DEAD) then\n else\n endif
с точностью до погрешности измерений выполняются за одинаковое время:8000 тактов
not выполнется ~ 700 тактов.
 

Ty3uKДата: Среда, 24 Апреля 2013, 20:46:09 | Сообщение # 59
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Мона, ого, а вот это круто.
Вообще, я тоже засомневался с бенчмарка циклом, ибо на хгм все бенчи делают в таймере. hmm


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Среда, 24 Апреля 2013, 21:29:45 | Сообщение # 60
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Мой господин очень остроумен? Иль же это новый вызов дуосу?
Цитата (Мона)
А еще он таки купился на всю мою фигню в этой теме.

Может быть на две фигни? :D
Нельзя просто так и узнать точное время выполнения операций, это ещё и от мощности самого процессора зависит, который обрабатывает эти данные. Разве аппаратная часть тоже не влияет?
Цитата (Мона)
можно Кингу пожелать

Нет.
PS: Алиса из страны чудес показала истинные чудеса дуосу. Что же ответит дуос?
 

DaroДата: Среда, 24 Апреля 2013, 21:51:45 | Сообщение # 61
6 уровень
Группа: Проверенные
Сообщений: 217
Награды: 0
Репутация: 105
Блокировки:
Хорошая статья,только разбираться долго

 

Ty3uKДата: Среда, 24 Апреля 2013, 23:09:38 | Сообщение # 62
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Волчачка, было сказано выше, что интерпретатор должен выполнять команды с приблизительно одинаковой скоростью на почти любом железе.

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

ВолчачкаДата: Четверг, 25 Апреля 2013, 00:08:17 | Сообщение # 63
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Ty3uK)
должен

Цитата (Ty3uK)
почти

Ну тут всё ясно.

А так по сути, я имел ввиду по другое, а в общем неважно.

Добавлено (25 Апреля 2013, 00:08:17)
---------------------------------------------
Цитата (Ty3uK)
Волчачка, было сказано выше, что интерпретатор должен выполнять команды с приблизительно одинаковой скоростью на почти любом железе.

Помнишь говорили поточности вара. Ну это не важно.
А так если подумать.
Допустим есть события и действия с условиями. События и Действия Допустим два взаимосвязанных псевдопотока.
Помнишь тот мой тест с получением урона, где я ломал общий поток.
Т.е. там присутствует последовательное выполнение операций с неким сдвигом. Например: Если будет два таймера и они будут выполнять одну и туже операцию. Выполнят они их одинаково, но с очень мизерной разницей во времени, почему?
А Элис показал выполнение самой операции а не общее выполнение.

Алис, а Алис? А ты действительно хочешь дуосу устроить сказку?


Сообщение отредактировал Волчачка - Четверг, 25 Апреля 2013, 00:09:26
 

lawsonДата: Четверг, 25 Апреля 2013, 00:54:54 | Сообщение # 64
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
ктонибудь вообще знает почему некоторые функции требуют для выполнения время а некоторые не ждут выполнения - просто вызываются.
Например в АС была такая фунцкия по загрузке xml документа, нужен был чтото типа таймера чтобы узнать загружен ли xml документ.


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

Ty3uKДата: Четверг, 25 Апреля 2013, 10:19:01 | Сообщение # 65
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Причем здесь стек? Пуш в стек занимает ничтожно малое количество времени.

Добавлено (25 Апреля 2013, 10:19:01)
---------------------------------------------
Хотя, конечно, зависит от самого объекта, но все же.


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

NaturekidДата: Четверг, 25 Апреля 2013, 19:59:18 | Сообщение # 66
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Волчачка, твоя наглая рожа ломанула 1 из моих любимых аккаунтов в гарене, сучонок?)

 

NaturekidДата: Четверг, 25 Апреля 2013, 20:52:48 | Сообщение # 67
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Волчачка, лгунишка рыжая :)

 

ВолчачкаДата: Четверг, 25 Апреля 2013, 21:50:08 | Сообщение # 68
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата (Naturekid)
Волчачка, лгунишка рыжая :)

Нет, я рыжая прелесть и некрасиво флудить в теме Алисы из страны чудес.
 

NaturekidДата: Четверг, 25 Апреля 2013, 22:06:11 | Сообщение # 69
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
кто ж виноват, что ты приём лс отключил. dunno
боишься, что тебя будут огорашивать внезапными сообщениями с матами, как это ты делал что ли?
Да никому ты не нужен :) я даже твои мультиакки в ответ не материл. ^_^


 

ВолчачкаДата: Четверг, 25 Апреля 2013, 22:31:28 | Сообщение # 70
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Naturekid, парнишка, они лишь куклы, не мультиакки. И кстати, Мистер П. не мультиак и не кукла, а настоящий пользователь.
Не этому учили детей природы, с куклами играть и чай пить в беседке.
Цитата (Naturekid)
кто ж виноват, что ты приём лс отключил. dunno

Я отключил потому, что всё заканчивается на у.
Цитата (Naturekid)
боишься, что тебя будут огорашивать внезапными сообщениями с матами, как это ты делал что ли?

Нет.
Цитата (Naturekid)
Да никому ты не нужен :) я даже твои мультиакки в ответ не материл.

Вот именно.
 

ИнтеллектДата: Пятница, 26 Апреля 2013, 01:51:13 | Сообщение # 71
1 уровень
Группа: Пользователи
Сообщений: 2
Награды: 0
Репутация: 7
Блокировки:
Мона, игра началась? Мм. Шахматы.
 

ВолчачкаДата: Пятница, 26 Апреля 2013, 14:20:54 | Сообщение # 72
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
kingmaximaxclass.h
Код
#pragma once

namespace kingmaximaxpack
{

class king
{
public:
  int x;
  int y;
  int GetX();
  int GetY();
  void SetX(int val);
  void SetY(int val);
};

int king::GetX()
{
  return king::x;
}

int king::GetY()
{
  return king::y;
}

void king::SetX(int val)
{
  king::x=val;
}

void king::SetY(int val)
{
  king::y=val;
}
}

main.cpp
Код

#include <iostream>
#include "kingmaximaxclass.h"
using namespace std;
using namespace kingmaximaxpack;
int i_pow( int a, int b)
{
  int r = 1;
  if (b > 0)
  {
  for(int i=0;i<b;i++)
  {
    r=r*a;
  }
     return r;
  }
  else
  {
   return r;
  }
}

void main()
{
int z = 1*i_pow(2,5)+1*i_pow(2,4)+0*i_pow(2,3)+0*i_pow(2,2)+1*i_pow(2,1)+1*i_pow(2,0);
int x,y;
king k;
if (z == 51)
{
  cout<<"Excellent! "<<endl;
}
else
{
cout<<"Abomination! "<<endl;
}
cout<<"Enter x: ";cin>>x;cout<<endl;
cout<<"Enter y: ";cin>>y;cout<<endl;
k.SetX(x);k.SetY(y);
cout<<"test class king x,y: "<<k.GetX()<<","<<k.GetY()<<endl;
system("pause");
}

Сделал небольшую разминку на C++, так как стало скучно.
Правда я ещё не рассмотрел работу с DirectX.. ну это очень позже.
Меня лишь сие интересуют dll и чтение файлов.
 

SirNikolasДата: Пятница, 26 Апреля 2013, 17:00:59 | Сообщение # 73
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:


 

lawsonДата: Пятница, 26 Апреля 2013, 18:41:18 | Сообщение # 74
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
^
оба типичный пример "С плюсы для раков"


Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

lawsonДата: Пятница, 26 Апреля 2013, 18:56:57 | Сообщение # 75
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
Волчачка, пишешь на с++ значит ты четкий кодер. Малоли что ты пишешь и как, главное на С++, главное пишешь

Nic nie wiem bo mam chuj.
редактирую посты! ВСЕ!
 

  • Страница 3 из 4
  • «
  • 1
  • 2
  • 3
  • 4
  • »
Поиск:

Copyright © 2006 - 2026 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz