• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Suma schematów Bernoulliego oraz int too large to convert to float

0 głosów
607 wizyt
pytanie zadane 25 listopada 2021 w Python przez osobliwy nick Użytkownik (900 p.)

Muszę policzyć to:

import math

k = 1086
suma=0

for k in range(1086):
    a = math.comb(178322, k) * (1086/163861)**k * (1-1086/163861)**(178322-k)
    suma += a

print(suma)

Jest to suma schematów Bernoulliego i dostaję błąd OverflowError: int too large to convert to float. Próbowałem to przepisać używając "//", ale dostaję nieprawdopodobne wyniki - wszystkie składniki sumy poza ostatnim wynoszą zero. Jak to policzyć poprawnie?

1 odpowiedź

+1 głos
odpowiedź 25 listopada 2021 przez Wiciorny Ekspert (283,540 p.)

Osiągasz granice w jakiej można zapisać wartość dla danego typu, dlatego masz taki błąd i to jest jasno napisane 

int too large to convert to float. 

musisz operować na innym rodzaju danych 

Float jest ograniczonej precyzji i JEST LIMITOWANY musisz zmienić rodzaj, najlepiej na decimal 

https://docs.python.org/3/library/decimal.html także pozostaje Ci zamienić dane na decimal 

tu masz nawet poczyniony artykuł o float i o problemie https://docs.python.org/3/tutorial/floatingpoint.html

 

komentarz 25 listopada 2021 przez osobliwy nick Użytkownik (900 p.)

Napisałem kod:

import math
import decimal

k = 1086
suma=0

for k in range(1086):
    a = math.comb(178322, k) * (decimal.Decimal(1106/163861))**k * (decimal.Decimal(1-1106/163861))**(178322-k)
    suma += a

print(suma)

Zwraca pewien wynik. Chyba działa poprawnie. Czy myślisz, że jest to napisane prawidłowo?

Podobne pytania

+1 głos
0 odpowiedzi 965 wizyt
pytanie zadane 28 lipca 2021 w Python przez Hysek Obywatel (1,250 p.)
0 głosów
1 odpowiedź 642 wizyt
0 głosów
1 odpowiedź 2,023 wizyt
pytanie zadane 7 marca 2020 w Python przez edwardkraweznik Dyskutant (9,930 p.)

93,787 zapytań

142,750 odpowiedzi

323,421 komentarzy

63,392 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...