math.fmod всегда euqls math.mod? - PullRequest
       0

math.fmod всегда euqls math.mod?

4 голосов
/ 16 августа 2011

Я попытался выяснить разницу между math.fmod и math.mod с помощью следующего кода:

a={9.5 ,-9.5,-9.5,9.5}
b={-3.5, 3.5,-3.5,3.5}
for i=1,#a do
    if math.fmod(a[i],b[i])~=math.mod(a[i],b[i]) then
        print("yeah")
    end
end

Он никогда не печатает "да"! Что я должен положить в массиве a и b, чтобы увидеть «да»?

В документации math.fmod () говорится, что он возвращает остаток от деления x на y, которое округляет частное до нуля.

Ответы [ 2 ]

5 голосов
/ 16 августа 2011

math.mod - это та же функция , что и math.fmod. На самом деле, math.mod существует только для совместимости с предыдущими версиями; это не указано в руководстве. Попробуйте math.modf вместо math.mod в вашем коде.

0 голосов
/ 12 ноября 2013

Modulo в Lua определяется как «остаток от деления, округляющего частное в сторону минус бесконечности» - Ссылка здесь - что отличается от определения fmod (как вы цитировали в своем первоначальном посте).

Что вам действительно нужно сделать, это использовать оператор по модулю (%), а не math.mod:

a={9.5 ,-9.5,-9.5,9.5}
b={-3.5, 3.5,-3.5,3.5}
for i=1,#a do
    if math.fmod(a[i],b[i]) ~= a[i] % b[i] then
        print("yeah")
    end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...