2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему
 
 Функция модуля
Сообщение21.03.2009, 15:46 


21/03/09
406
Здравствуйте.
Никак немогу придумать формулу.
Мне нужно формулу
a mod b
(Тоесть другими словами получить остаток от деления)
Выразить через другие функции
Цитата:
+ - / * [] {}

Например можно так
a-([a/b]*b)
Но эта формула не работает если например a отрицательное число (в некоторых случаях ).

Это можно проверить через
Код:
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 чётко видно
Изображение
Должно получаться 4, а при использовании этой формулы выходит -13
Подскажите пожалуйста, в чём-же тут дело?

 Профиль  
                  
 
 
Сообщение21.03.2009, 16:10 
Аватара пользователя


19/03/07
597
Bielefeld
А это не одно и то же?
$-438 \mod 17=4\mod 17=-13 \mod 17$
$4-17=-13$
Смотря какой Вам остаток нужен.

Добавлено спустя 1 минуту 58 секунд:

А что это за функция {} такая? :roll:

 Профиль  
                  
 
 
Сообщение21.03.2009, 16:29 


21/03/09
406
Цитата:
Смотря какой Вам остаток нужен.

Я точно незнаю. Но в данном случае например мне нужно получить число 4 вместо -13 (тоесть как в Maple например)
А самое это число я буду использовать для алгоритма решения сравнения по модулю с одним неизвестным.
Тоесть изза того что моя формула даёт в результате -13 у меня получается неправильный ответ.

Цитата:
А что это за функция {} такая?

Дробная часть числа.

 Профиль  
                  
 
 
Сообщение21.03.2009, 16:41 
Заслуженный участник


11/05/08
32166
nbyte в сообщении #197194 писал(а):
Должно получаться 4, а при использовании этой формулы выходит -13
Подскажите пожалуйста, в чём-же тут дело?

Функция Trunc округляет к нулю симметрично, а для получения остатка нужно одностороннее округление. Запрограммируйте вручную обработку отдельно положительных и отдельно отрицательных входных данных.

------------------------------------------------------
И, кстати, эта функция здесь выглядит некультурно. Лучше использовать n mod k (там тоже возникают аналогичные проблемы со знаками, и их тоже придётся обходить добавлением условного оператора).

 Профиль  
                  
 
 
Сообщение21.03.2009, 17:19 


21/03/09
406
Цитата:
а для получения остатка нужно одностороннее округление.

А вот как :)
ewert, спасибо вам за помощь.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group