Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Теория чисел] функция модуля


Автор: Ak47black 16.3.2009, 22:17
Здравствуйте.
Никак немогу придумать формулу.
Мне нужно формулу
Цитата

a mod b

(Тоесть другими словами получить остаток от деления)
Выразить через другие функции
Цитата

+ - / * [] {}

Например можно так
Цитата

a-([a/b]*b)

Но эта формула неработает если например a отрицательное число.


Автор: Soah 16.3.2009, 23:02
Ak47black, она работает, можешь проверить на каком-то языке.

-10 % 3 = -1

http://en.wikipedia.org/wiki/Modulo_operation

Автор: Dmi3ev 17.3.2009, 02:05
Цитата

Но эта формула неработает если например a отрицательное число.

как ты к этому пришел??? рассказывай...

Автор: Ak47black 19.3.2009, 20:27
Мда пардон, действительно работает  smile 

Автор: Ak47black 21.3.2009, 14:35
Извините но я теперь нашол числа с которыми эта формула неработает
Это можно проверить через 
Код

program Project12;

{$APPTYPE CONSOLE}

uses
  SysUtils;

  function Modul(x, b: Integer): Integer;
  begin
    Result:= (x-(Trunc((x/b))*b));
  end;

var
  a: Integer;
begin
  Writeln(Modul(-438, 17));
  Readln(a);
end.


Или в Maple чётко видно
user posted image
Должно получаться 4, а при использовании этой формулы выходит -13
Подскажите пожалуйста, в чём-же тут дело?
(Вродебы не туплю  smile )

Автор: Soah 21.3.2009, 17:43
-438 / 17 = -25
-438 % 17 = -13

17*(-25) + -13 = -438

17*(-26) + 4 = -438 smile 

Код

    alert(-438 % 17); // -13

Проверь ещё раз, формула работает.

Автор: Ak47black 21.3.2009, 18:08
Не я уже понял.
Тут есть два ответа и оба правильные.
Просто чтобы получить 4 нужно Trunc((x/b))-1  smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)