2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Арифметические операции в СИ и Python
Сообщение14.09.2017, 15:54 
Аватара пользователя


14/09/17
5
Добрый день.
Почему в Си (gcc (GCC) 7.2.0)
  • при вычислении целого от $\frac{numerator}{denominator}$, где numerator < 0 или denominator < 0
    производится округление в сторону большего?
  • при вычислении дробной части от $\frac{numerator}{denominator}$, где numerator < 0
    получается отрицательное число?
Например,
Используется синтаксис C
#include <stdio.h>
#include <math.h>

int main()
{
    int numerator, denominator;
    numerator = -20;
    denominator = 3;
    printf("%d\n", numerator/denominator); /* rez -6*/
    printf("%d\n", div(numerator, denominator).quot); /*rez -6*/
    printf("%d", numerator%denominator); /* rez -2*/
    return 0;
}
 

То же самое в Python
Используется синтаксис Python
>>> numerator = -20
>>> denominator = 3
>>> print(numerator//denominator)
-7
>>> print(numerator%denominator)
1
 

А результат другой. :|

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:01 
Заслуженный участник
Аватара пользователя


06/10/08
6422
mkhlmLF в сообщении #1247688 писал(а):
Почему в Си (gcc (GCC) 7.2.0)
при вычислении целого от $\frac{numerator}{denominator}$, где numerator < 0 или denominator < 0
производится округление в сторону большего?
при вычислении дробной части от $\frac{numerator}{denominator}$, где numerator < 0
получается отрицательное число?
По стандарту языка C.
Цитата:
6.5.5.6 When integers are divided, the result of the / operator is the algebraic quotient with any fractional part discarded.(105) If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a; otherwise, the behavior of both a/b and a%b is undefined.

(105)This is often called "truncation toward zero".

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:05 
Заслуженный участник
Аватара пользователя


16/07/14
9205
Цюрих
В Python остаток имеет тот же знак, что и делитель. При этом делимое всегда равно частичному частному, умноженному на делитель, плюс остаток.

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:06 
Аватара пользователя


14/09/17
5
Xaositect писал(а):
По стандарту языка C.

А это математически правильно?

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:08 
Заслуженный участник
Аватара пользователя


16/07/14
9205
Цюрих
mkhlmLF в сообщении #1247697 писал(а):
А это математически правильно?
А математически можно ввести разные операции. На практике обычно деление берут из вещественных чисел, и дальше округляют куда нужно.
А остатки чаще появляются при факторизации, и там $1$ и $-6$ просто попадают в один класс.

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:12 
Аватара пользователя


14/09/17
5
Спасибо, просто, какой-то непривычный результат, а почему
Код:
div(numerator, denominator).quot); /*rez -6*/

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:16 
Заслуженный участник
Аватара пользователя


16/07/14
9205
Цюрих
По стандарту, в quot пишется $a/b$.

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:17 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
А сколько вы хотели? (Мы всё ещё делим $-20$ на $3$?)

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:18 
Аватара пользователя


14/09/17
5
Понятно, буду использовать вещественные типы.

-- 14.09.2017, 18:21 --

Делим. Это пример из Подбельского. Я ожидал -7 и 1, как в Python.

-- 14.09.2017, 18:24 --

Всем спасибо. Буду изучать

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 17:23 
Заслуженный участник


02/08/11
7013
mkhlmLF в сообщении #1247705 писал(а):
Понятно, буду использовать вещественные типы.
Зачем?

 Профиль  
                  
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 23:10 
Аватара пользователя


14/09/17
5
Моя ошибка, я не знал про "пол/потолок", и решил что значение некорректно. Вопрос закрыт

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

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