2014 dxdy logo

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

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




 
 Арифметические операции в СИ и Python
Сообщение14.09.2017, 15:54 
Аватара пользователя
Добрый день.
Почему в Си (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 
Аватара пользователя
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 
Аватара пользователя
В Python остаток имеет тот же знак, что и делитель. При этом делимое всегда равно частичному частному, умноженному на делитель, плюс остаток.

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

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

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

 
 
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:12 
Аватара пользователя
Спасибо, просто, какой-то непривычный результат, а почему
Код:
div(numerator, denominator).quot); /*rez -6*/

 
 
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:16 
Аватара пользователя
По стандарту, в quot пишется $a/b$.

 
 
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 16:17 
Аватара пользователя
А сколько вы хотели? (Мы всё ещё делим $-20$ на $3$?)

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

-- 14.09.2017, 18:21 --

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

-- 14.09.2017, 18:24 --

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

 
 
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 17:23 
mkhlmLF в сообщении #1247705 писал(а):
Понятно, буду использовать вещественные типы.
Зачем?

 
 
 
 Re: Арифметические операции в СИ и Python
Сообщение14.09.2017, 23:10 
Аватара пользователя
Моя ошибка, я не знал про "пол/потолок", и решил что значение некорректно. Вопрос закрыт

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group