Пример:
i = 292893227695
j = 8*i**2 + 1
k = math.sqrt(j)
print(j)
print(k)
print(k.is_integer())
выдает результат
686291542636760920104201
828427149867.0
True
Несмотря на то, что k не является целым числом.
В более общем плане я пытаюсь решить задачу 100 в проекте Эйлера.
Если в коробке находится двадцать один цветной диск, состоящий из пятнадцати синих
дисков и шести красных дисков, и два диска были взяты наугад, можно
видеть, что вероятность взять два синих диска P(BB) = (15/21) x (14/20) = 1/2.
Следующая такая комбинация, для которой существует ровно 50% вероятность
наугад взять два синих диска, - это коробка, содержащая восемьдесят пять синих
дисков и тридцать пять красных дисков.
Найдя первую комбинацию, содержащую более 1012 = 1 000 000
000 000 дисков в общей сложности, определите количество синих дисков, которые
коробка будет содержать.
В целом это может быть плохой стратегией, поскольку числа очень велики, но все же интересно, что конкретно делать с этой проблемой с большими числами.
Полный код ниже. Я попробовал импортировать getcontext, но это ничего не изменило:
import math
from time import perf_counter
from decimal import Decimal, getcontext
getcontext().prec = 50
start = perf_counter()
n = 7 # question specifies 12 (10**12)
limit = 10**n # starts to slow at 7
startno = 1 #292893220000 #2.9*10**11
# squares = set()
# for i in range(1,limit):
# squares.add(i**2)
candidates = []
for i in range(startno,limit):
j = (8*i**2 + 1)
k = math.sqrt(j)
if k.is_integer() == True:
b = ((2*i + 1) + k ) / 2
candidates.append((b,i))
print(b,i,b/(b+i))
if b + i > 10**12 and b.is_integer() == True:
print(b,i)
break
# print(candidates)
# print(len(squares))
end = perf_counter()
print(end-start, n)
# need to find some way to find the answers. These methods all fail due to rounding in Python
print(math.sqrt(285700000000))
i = 292893227695
j = 8*i**2 + 1
print(j)
k = math.sqrt(j)
print(k)
print(k.is_integer())
Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-python
Как бороться с большими числами и неточностями в Python? ⇐ Python
Программы на Python
-
Anonymous
1765995800
Anonymous
Пример:
i = 292893227695
j = 8*i**2 + 1
k = math.sqrt(j)
print(j)
print(k)
print(k.is_integer())
выдает результат
686291542636760920104201
828427149867.0
True
Несмотря на то, что k не является целым числом.
В более общем плане я пытаюсь решить задачу 100 в проекте Эйлера.
Если в коробке находится двадцать один цветной диск, состоящий из пятнадцати синих
дисков и шести красных дисков, и два диска были взяты наугад, можно
видеть, что вероятность взять два синих диска P(BB) = (15/21) x (14/20) = 1/2.
Следующая такая комбинация, для которой существует ровно 50% вероятность
наугад взять два синих диска, - это коробка, содержащая восемьдесят пять синих
дисков и тридцать пять красных дисков.
Найдя первую комбинацию, содержащую более 1012 = 1 000 000
000 000 дисков в общей сложности, определите количество синих дисков, которые
коробка будет содержать.
В целом это может быть плохой стратегией, поскольку числа очень велики, но все же интересно, что конкретно делать с этой проблемой с большими числами.
Полный код ниже. Я попробовал импортировать getcontext, но это ничего не изменило:
import math
from time import perf_counter
from decimal import Decimal, getcontext
getcontext().prec = 50
start = perf_counter()
n = 7 # question specifies 12 (10**12)
limit = 10**n # starts to slow at 7
startno = 1 #292893220000 #2.9*10**11
# squares = set()
# for i in range(1,limit):
# squares.add(i**2)
candidates = []
for i in range(startno,limit):
j = (8*i**2 + 1)
k = math.sqrt(j)
if k.is_integer() == True:
b = ((2*i + 1) + k ) / 2
candidates.append((b,i))
print(b,i,b/(b+i))
if b + i > 10**12 and b.is_integer() == True:
print(b,i)
break
# print(candidates)
# print(len(squares))
end = perf_counter()
print(end-start, n)
# need to find some way to find the answers. These methods all fail due to rounding in Python
print(math.sqrt(285700000000))
i = 292893227695
j = 8*i**2 + 1
print(j)
k = math.sqrt(j)
print(k)
print(k.is_integer())
Подробнее здесь: [url]https://stackoverflow.com/questions/79846929/how-to-deal-with-large-numbers-and-imprecision-in-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия