Сейчас 11:22:03 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Как исправить сбой подсчета чисел?
Как исправить сбой подсчета чисел?
BorodachДата: Четверг, 28 Марта 2013, 16:04:37 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Вот система подсчета
И если передавать значение больше 150, то возвращает далеко не верное значаение.
Код
function AniSpeed takes integer AtSpeed,real AnSpeed returns real
local integer l = 0
local real data = 0.350
local real temp = 0.350
      if AtSpeed > 0 then
            loop
                 set temp = data - ( temp * (0.01 * l) )
                 call BJDebugMsg(R2S(temp))
                 set l = l + 1
            exitwhen l > AtSpeed
            endloop
       endif
return temp
endfunction

Если это внутри игровая ошибка, то можно ее как то избежать?


Karamba


Сообщение отредактировал Borodach - Четверг, 28 Марта 2013, 16:07:51
 

VasyaBaratrumДата: Четверг, 28 Марта 2013, 19:58:53 | Сообщение # 2
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 15
Блокировки:
функция R2S округляет real до 3 знаков

Так же стоит перевести integer " l " в real
Код
set temp = data - ( temp*0.01 * I2R(l) )
 

BorodachДата: Четверг, 28 Марта 2013, 20:05:19 | Сообщение # 3
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Цитата (VasyaBaratrum)
функция R2S округляет real до 3 знаков

На изображении можно увидеть, что это, проблему никак не решит.
Цитата (VasyaBaratrum)
Так же стоит перевести integer " l " в real

Нет разницы будет ли l все время 1.000, 2.000, 3.000 и т.д или целочисленное 1, 2, 3


Karamba


Сообщение отредактировал Borodach - Четверг, 28 Марта 2013, 20:05:51
 

VasyaBaratrumДата: Четверг, 28 Марта 2013, 22:18:43 | Сообщение # 4
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 15
Блокировки:
Цитата (Borodach)
Цитата (VasyaBaratrum)функция R2S округляет real до 3 знаков На изображении можно увидеть, что это, проблему никак не решит.

с помощью функции R2SW можно больше знаков отображать

Не заметил в твоей функции ошибок, аргумент AnSpeed наверно позже будешь использовать.
 

BorodachДата: Четверг, 28 Марта 2013, 22:50:37 | Сообщение # 5
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
VasyaBaratrum, AnSpeed передается как 0.350 (чтоб меньше лишнего было, сразу дал какое там число)
Этих 0.350 постепенно уменьшаются.... но после AtSpeed больше 150 она начинает прыгать через раз. На скрине видно:
.141 -> .142 -> .139 -> .142 и т.д, одно уменьшается другое увеличивается
а должно примерно
.141 -> .140 -> .140 -> .139


Karamba


Сообщение отредактировал Borodach - Четверг, 28 Марта 2013, 22:51:14
 

VasyaBaratrumДата: Четверг, 28 Марта 2013, 23:41:11 | Сообщение # 6
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 15
Блокировки:
на 159 начинается то увеличение, то уменьшение.
на 166 начинается чередование знаков.

да и отношение последующего результата к предыдущему колеблется, в зависимости от роста integer l. Например:

l=0 0.35/0.35=1
l=1 0.346/0.35=0.988571418
l=2 0.343/0.346=0.991329479
l=3 0.34/0.343=0.991253644
l=4 0.336/0.34=0.988235294
...
не образуется прогрессия
 

BorodachДата: Четверг, 28 Марта 2013, 23:55:09 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Цитата (VasyaBaratrum)
да и отношение последующего результата к предыдущему колеблется, в зависимости от роста integer l

Так и должно быть, ТО есть каждое последующее число уменьшается на 1% предыдущего.
И я не могу понять почему почему в дальнейшем число не уменьшается на 1% предыдущего, а уменьшается то увеличивается по нарастающей.


Karamba
 

VasyaBaratrumДата: Четверг, 28 Марта 2013, 23:57:18 | Сообщение # 8
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 15
Блокировки:
Цитата (Borodach)
Так и должно быть, ТО есть каждое последующее число уменьшается на 1% предыдущего.
а может тогда просто temp = 0.99*temp ? :D
 

BorodachДата: Пятница, 29 Марта 2013, 00:32:17 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
VasyaBaratrum, Варик по другому считает, мой вариант выдает другие значения

Добавлено (29 Марта 2013, 00:32:17)
---------------------------------------------
VasyaBaratrum, Или я не правильно делаю?
Код
function AniSpeed takes integer AtSpeed,real AnSpeed returns real
local integer l = 0
local real data = AnSpeed
local real temp = data+AnSpeed*0.01
     if AtSpeed > 0 then
             loop
                  
                 set temp = temp * 0.99
                 //set temp = data - ( temp * (0.01 * l) )
                 //call BJDebugMsg(R2S(temp))
                 set l = l + 1
                 exitwhen l > AtSpeed
             endloop
     endif
     call BJDebugMsg(R2S(temp))
     return temp
endfunction


Karamba


Сообщение отредактировал Borodach - Пятница, 29 Марта 2013, 08:10:14
 

VasyaBaratrumДата: Пятница, 29 Марта 2013, 12:02:40 | Сообщение # 10
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 15
Блокировки:
Borodach, ну если ты хочешь, чтобы следующий результат был на 1% меньше предыдущего, то лучше всего
Код
set temp = 0.99*temp
чем вычитать
 

Ty3uKДата: Пятница, 29 Марта 2013, 19:33:24 | Сообщение # 11
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Какие значения аргументов передаешь?

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

BorodachДата: Пятница, 29 Марта 2013, 20:27:58 | Сообщение # 12
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
AnSpeed = 0.350 ( передаю )
AtSpeed = разные, в зависимости скорости атаки. Если герой поднимает "Перчатки скорости атаки +15%" то это число будет 15. И если это число превышает ~150, то дальше уже неверные значения.


Karamba
 

Ty3uKДата: Пятница, 29 Марта 2013, 20:36:29 | Сообщение # 13
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Может быть это из-за неявного преобразования l в real?

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

BorodachДата: Пятница, 29 Марта 2013, 21:18:26 | Сообщение # 14
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
Ty3uK, Перевел в реальное, то же самое.

Karamba
 

Ty3uKДата: Пятница, 29 Марта 2013, 21:42:03 | Сообщение # 15
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Я, конечно, математик еще тот, но мне кажется что вполне возможно на какой-то итерации получить отрицательное число (темп почти рекурсивно меняется в сторону увеличения).

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

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Как исправить сбой подсчета чисел?
  • Страница 1 из 1
  • 1
Поиск:

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