Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

Я вот с такой странностью столкнулся (правда не в сталкере, а в интерпретаторе луа версии 5.0.3. Вот имеется тупейший код для округления, но работающий только с положительными числами:

 

function math_round( roundIn , roundDig ) -- первый аргумент - число которое надо округлить, второй аргумент - количество символов после запятой.
    local mul = math.pow( 10, roundDig )
    return ( math.floor( ( roundIn * mul ) + 0.5 )/mul )
end

 

Теперь вызываем этот код не только для положительных чисел но и для отрицательных:

 

local digit = 1.23456789

print( math_round( digit, 0 ) )
print( math_round( digit, 1 ) )
print( math_round( digit, 2 ) )
print( math_round( digit, 3 ) )
print( math_round( digit, 4 ) )
print( math_round( digit, 5 ) )

print( math_round( -digit, 0 ) )
print( math_round( -digit, 1 ) )
print( math_round( -digit, 2 ) )
print( math_round( -digit, 3 ) )
print( math_round( -digit, 4 ) )
print( math_round( -digit, 5 ) )

 

А теперь смотрим вывод и выпадаем в осадок:

 

user@cjayho:~/Desktop$ lua ./22.lua
1
1.2
1.23
1.235
1.2346
1.23457
-1
-1.2
-1.23
-1.235
-1.2346
-1.23457

 

То есть несмотря на то, что код работает с отрицательными числами некорректно, при выполнении кода получаются корректные результаты. Вот у меня и вопрос - wtf o_O?

 

 

Изменено пользователем cj ayho

Поделиться этим сообщением


Ссылка на сообщение

abramcumner

Багодарю вас тащь капитан. А прибавление 0,5 к первому аргументу вас не смущает?

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

abramcumner

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

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

Ну я думаю не стОит объяснять как происходит алгоритм округления. Например если округляем до сотых и в тысячных получается 5 и более, то к сотым при округлении добавляется единица. Так вот, использованный мною алгоритм (кнутовский кстати) с положительными числами работает как нужно, но следуя логике алгоритма он не должен работать с отрицательными числами. Хотя при реализации в луа работает. Вот я и спросил - почему.

 

Если я конечно корректно определил что math.floor просто отбрасывает числа после запятой.

Изменено пользователем cj ayho

Поделиться этим сообщением


Ссылка на сообщение

malandrinus, хм вот оно как. я просто оказывается при имплементации не ту ф-цию применил. Спасибо за информацию.

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...