XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
agentex

offline
Опыт: 34,834
Активность:
Получить 3 последних цифры числа
Сабж, токо без строк и циклов.
Юзаю такую конструкцию:
Код:
function somefunc takes integer h returns integer
local real r = h/1000.
local integer i = R2I((r-R2I(r))*1000.)
endfunction

но иногда получается неправильное число, например если h = 1050011, результат i будет 10, а не 11.
а такая погрешность в моей системе не допустима, поэтому прошу помощи у вас!
Старый 09.04.2009, 13:32
NETRAT

offline
Опыт: 83,712
Активность:
а че просто X mod 1000 уже не катит?
Старый 09.04.2009, 13:33
agentex

offline
Опыт: 34,834
Активность:
NETRAT мб и катит просто не шарю я в этих делимых и делителях ) можеш обьяснить че делает mod? и конретный код дай плз
Старый 09.04.2009, 13:35
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
остаток от деления на твое число дает

Артте добавил:
agentex, не ожидал от тебя такого)
11 mod 2=1
10 mod 10=0
15 mod 4=3
16 mod 5=1

Артте добавил:
следовательно на 10, 100, и 1000 и т.д. дают последние цифры числа, количество которых равно кол-ву нулей в числе на которое делишь)
Старый 09.04.2009, 13:38
agentex

offline
Опыт: 34,834
Активность:
эм а собственно какая тогда разница между этим
Код:
function ModuloReal takes real dividend, real divisor returns real
    local real modulus = dividend - I2R(R2I(dividend / divisor)) * divisor
    return modulus
endfunction

и этим
Код:
local real r = h/1000.
local integer i = R2I((r-R2I(r))*1000.)

?

agentex добавил:
т.е. divident - Это делимое, divisor - делитель?
Старый 09.04.2009, 13:43
NETRAT

offline
Опыт: 83,712
Активность:
я вообще не понимаю при чем тут тип real...
ModuloInteger(X,1000)
Старый 09.04.2009, 13:45
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
а что во втором h?
Старый 09.04.2009, 13:47
agentex

offline
Опыт: 34,834
Активность:
если брать функцию ModuloInteger, то смысл этого:
Код:
local integer modulus = dividend - (dividend / divisor) * divisor

за гранью моего понимания..
Старый 09.04.2009, 13:47
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Цитата:
т.е. divident - Это делимое, divisor - делитель?

да

Артте добавил:
agentex
а оно правильно работает? о_О
Старый 09.04.2009, 13:48
agentex

offline
Опыт: 34,834
Активность:
Код:
я вообще не понимаю при чем тут тип real...

согласен, это проехали.

agentex добавил:
Код:
а оно правильно работает? о_О

что?

agentex добавил:
h это 1050011
Старый 09.04.2009, 13:49
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Цитата:
если брать функцию ModuloInteger, то смысл этого:

Код:
local integer modulus = dividend - (dividend / divisor) * divisor

за гранью моего понимания..
Старый 09.04.2009, 13:49
agentex

offline
Опыт: 34,834
Активность:
Цитата:
dividend - (dividend / divisor) * divisor

если я правльно понимаю, сначала выполняется действие в скобках, потом умножение? это же бред, всегда будет получаться 0

agentex добавил:
Артте, это БЖ функция из жаса.
Код:
function ModuloInteger takes integer dividend, integer divisor returns integer
    local integer modulus = dividend - (dividend / divisor) * divisor

    // If the dividend was negative, the above modulus calculation will
    // be negative, but within (-divisor..0).  We can add (divisor) to
    // shift this result into the desired range of (0..divisor).
    if (modulus < 0) then
        set modulus = modulus + divisor
    endif

    return modulus
endfunction
Старый 09.04.2009, 13:51
NETRAT

offline
Опыт: 83,712
Активность:
Старый 09.04.2009, 13:51
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
agentex
и я о том же..ща пойду проверю эту функцию в варе, мб там шаманские действия какие-то

Артте добавил:
оно работает..я в растерянности и в сомнении, что что-то понимаю
Старый 09.04.2009, 13:55
agentex

offline
Опыт: 34,834
Активность:
проверил, и вправду работает.. походу в жасе своя арифметика
спс NETRAT
Старый 09.04.2009, 13:56
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
за гранью моего понимания..
dividend
исходное число

(dividend / divisor)
делим его на делитель, т.к. делитель у нас целое число, то значение вырожение автоматически приводится к целому, т.е. это равносильно R2I

(dividend / divisor) * divisor
после того как привели к целому, умножаем снова на это число, т.к. после приведения у нас обнулились первые 3 цифры, то полученное число будет исходным 3 последнии цифры которого - нули

dividend - (dividend / divisor) * divisor
исходное число минус исходное число последнии цифры которого нули, даст то что находится на нулях
Старый 09.04.2009, 13:59
NETRAT

offline
Опыт: 83,712
Активность:
работает она благодаря неявному преобразованию типов
кстате, процессору куда понятнее команды div и mod чем хитровымученное деление с приведением к типу real
Старый 09.04.2009, 13:59
agentex

offline
Опыт: 34,834
Активность:
Цитата:
(dividend / divisor)
делим его на делитель, т.к. делитель у нас целое число, то значение вырожение автоматически приводится к целому, т.е. это равносильно R2I

так, остается 1050
Цитата:
(dividend / divisor) * divisor - после того как привели к целому, умножаем снова на это число, т.к. после приведения у нас обнулились первые 3 числа, то полученое число будет исходным 3 последнии цыфрыв которые нули

1050000
Цитата:
dividend - (dividend / divisor) * divisor - исходное число минус исходное число полседнии цыфры которого нули, даст то что находится на нулях

1050011-1050000 = 11

точняк, все оказывается так просто.. спс за подробное разьяснение Джон
Цитата:
т.к. делитель у нас целое число, то значение вырожение автоматически приводится к целому, т.е. это равносильно R2I

- ключевая фраза
Старый 09.04.2009, 14:05
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 06:05.