Euler № 26, как преобразовать рациональное число для строкового представления с лучшей точностью?

Crtl + 1 является моим фаворитом. Быстрые исправления для красных загогулин.

Это также расположено в Меню Редактирования-> Быстрое исправление.

7
задан Zero Piraeus 22 January 2015 в 07:06
поделиться

4 ответа

Python имеет встроенную библиотеку для вычислений произвольной точности: Decimal. Например:

>>>from decimal import Decimal, getcontext
>>>getcontext().prec = 50
>>>x = Decimal(1)/Decimal(7)
>>>x
Decimal('0.14285714285714285714285714285714285714285714285714')
>>>str(x)
'0.14285714285714285714285714285714285714285714285714'

См. Документацию Python Decimal для получения дополнительных сведений. Вы можете установить нужную точность.

9
ответ дан 6 December 2019 в 09:20
поделиться

С gmpy :

>>> import gmpy
>>> thefraction = gmpy.mpq(1, 7)
>>> hiprecfloat = gmpy.mpf(thefraction, 256)
>>> hiprecfloat.digits(10, 50, -10, 10)
'0.14285714285714285714285714285714285714285714285714'
>>> 

Вы не можете сделать это с обычными числами с плавающей запятой - им просто не хватает точности для 50 цифр! Я полагаю, что есть способ сделать это (в версии 2.6 или выше) с помощью fractions.Fraction , но я не знаком ни с каким другим способом отформатировать его, кроме как '1/7' (не очень полезно в вашем случае! -).

2
ответ дан 6 December 2019 в 09:20
поделиться

Использование Perl (потому что я не могу писать на Python; -):

use strict; use warnings;

use integer;

my $x = 1;
my $y = 7;

for (1 .. 50) {
    $x *= 10 if $x < $y;
    my $q = $x / $y;
    $x -= $q * $y;
    print $q;
}

print "\n";
14285714285714285714285714285714285714285714285714

Как вы можете проверить вручную, цифры повторяются. Печать с использованием «%. 50f» даст вам иллюзию большей точности.

3
ответ дан 6 December 2019 в 09:20
поделиться

Вы можете умножить числитель на большое 10 ^ N и придерживаться целых чисел произвольной точности.

РЕДАКТИРОВАТЬ

то есть:

> def digits(a,b,n=50): return a*10**n/b
.
> digits(1,7)
14285714285714285714285714285714285714285714285714L

Целые числа Python имеют произвольную точность. Поплавки Python никогда не бывают произвольной точностью. (вам нужно будет использовать Decimal, как указал другой ответ)

6
ответ дан 6 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: