Подтвердить что ты не робот

Оператор Modulo в Python

Что делает модуль в следующем фрагменте кода?

from math import *
3.14 % 2 * pi

Как мы вычисляем по модулю число с плавающей запятой?

4b9b3361

Ответ 1

Математически оператор modulo может быть представлен как:

a % b = c
a - n*b = c

Где n - целое число, которое делает c как можно меньше, но положительным.

В этом случае:

  3.14 % 2
= 3.14 - 1 * 2
= 1.14

Кроме того, 3.14 % 2 * pi интерпретируется как (3.14 % 2) * pi. Я не уверен, что вы хотели написать 3.14 % (2 * pi) (в любом случае, алгоритм один и тот же. Просто вычтите/добавьте до тех пор, пока число не станет как можно меньше).

Ответ 2

В дополнение к другим ответам в документации fmod есть несколько интересных вещей, которые можно сказать по этому вопросу:

math.fmod(x, y)

Возврат fmod(x, y), как определено платформой C библиотека. Обратите внимание, что выражение Python x % y может не возвращать то же самое результат. Целью стандарта C является то, что fmod(x, y) точно (математически, до бесконечной точности), равной x - n*y для некоторых целое число n такое, что результат имеет тот же знак, что и x, и величина менее abs(y). Pythons x % y возвращает результат со знаком yвместо этого, и не может быть точно рассчитан для аргументов float. Для Например, fmod(-1e-100, 1e100) - -1e-100, но результат Pythons -1e-100 % 1e100 - это 1e100-1e-100, который не может быть представлен точно как float и округляется до удивительного 1e100. По этой причине, функция fmod() обычно предпочтительнее при работе с поплавками, тогда как Питоны x % y предпочтительнее при работе с целыми числами.

Ответ 3

так же, как и нормальный modulo 3.14 % 6.28 = 3.14, точно так же, как 3.14%4 =3.14 3.14%2 = 1.14 (остаток...)

Ответ 4

То же самое, чего вы ожидаете от обычного по модулю... например. 7 % 4 = 3, 7.3 % 4.0 = 3.3

Остерегайтесь проблем с плавающей запятой.

Ответ 5

вы должны использовать fmod (a, b)Хотя абс (x% y) abs (y) истинно математически, для поплавков это может быть неверно численно из-за округления. Например, и предполагая платформу, на которой плавающий Python является номером двойной точности IEEE 754, для того, чтобы -1e-100% 1e100 имели тот же знак, что и 1e100, вычисленный результат равен -1e-100 + 1e100, что численно точно равным 1e100. Функция fmod() в математическом модуле возвращает результат, знак которого соответствует знаку первого аргумента, и поэтому возвращает -1e-100 в этом случае. Какой подход более подходит, зависит от приложения.

где x = a% b используется для целого по модулю