FishHook
Потому что Decimal. Очень странно, что в java вы с удовольствием используете этот тип, а в питоне не хотите
Спасибо))), просто не знал про Decimal в питоне.
Значит, если мы просто считаем 1000000000000000000000000002 / 2, то питон считает это как обычный float и после преобразования int(1000000000000000000000000002 / 2) мы получим именно округленный float.
В то время, как Decimal(1000000000000000000000000002) сразу говорит интерпретатору, что считать нужно с такой точностью, сколько в числе знаков.
FishHook
Это потому что вы плохо представляете, как float хранится в памяти. Вот почитайте. Грубо говоря, float - это маленькая голова целого, длинный хвост дроби и степень двойки. Когда вы приводите float к целому вы побитово сдвигаете хвост на степень знаков.
Это-то я помню. Для меня вопрос заключался немного в другом. А именно - если везде пишут, что длинная арифметика встроена в питон, то значит, что под переменную float и int питон должен выделять не 32 бита, как в других языках (и даже не 64), а столько, сколько потребуется. Если для других языков объем памяти для хранения переменных четко прописан и найти это в сети достаточно легко, то для питона, если это где-то и записано, то еще нужно постараться найти. А поскольку сразу не нашел - отсюда и заблуждение.
Короче - нужно мне учить матчасть.
Спасибо еще раз за Ваши советы, теперь появилась какая-то ясность.
Последний вопрос - если есть подозрение, что мы выскочим из long-а, то в формуле, там где происходит первое действие, нужно прописать Decimal, а остальная часть уже сама будет считаться как Decimal?
g = 9999999999999999999999
Decimal(1 + g) / 2 * g