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

Python 3 целочисленное деление. Как сделать математические операторы совместимыми с C

Мне нужно перенести несколько формул из C в Python и наоборот. Каков наилучший способ убедиться, что в этом процессе ничего не сломалось?

Надеюсь, мой вопрос звучит не слишком общий. Я в первую очередь обеспокоен автоматическим преобразованием int/int = float.

4b9b3361

Ответ 1

Вы можете использовать оператор //, он выполняет целочисленное деление, но это не совсем то, что вы ожидаете от C:

Цитата из здесь:

Оператор//выполняет причудливый вид целочисленного деления. Когда результат положительный, вы можете думать о это как усечение (не округление) до 0 десятичных знаков, но будьте осторожны с что.

Когда целые делящиеся отрицательные числа, оператор//обходит "вверх", к ближайшему целому. Математически говоря, его округление "вниз" с тех пор -6 меньше -5, но это может быть вы, если бы ожидали усечь до -5.

Например, -11 // 2 в Python возвращает -6, где -11 / 2 в C возвращает -5. Я бы посоветовал писать и тщательно тестировать индивидуальную функцию разделения чисел, которая "эмулирует" поведение C.

В приведенной выше ссылке также есть ссылка на PEP 238, в которой есть интересная справочная информация о делении и изменениях от Python 2 до 3 Есть несколько предложений о том, что использовать для целочисленного деления, например divmod(x, y)[0] и int(x/y) для положительных чисел, возможно, вы найдете там более полезные вещи.

Ответ 2

Вам нужно знать, что делает эта формула, и понять как реализацию C, так и как ее реализовать в Python. Но если вы не делаете целочисленную математику, это должно быть очень похоже, и если вы делаете целочисленную математику, возникает вопрос.:)

Целочисленные математические данные либо выполняются из-за какой-то определенной цели, часто связанной с компьютерами, либо из-за того, что она быстрее, чем плавает при выполнении массивных вычислений, например Fractint для фракталов, и в этом случае Python обычно не является правильным выбором.;)