Hét vraag- en antwoordplatform van Nederland

Waarom wordt mijn integreer programma onnauwkeuriger bij een kleinere stapgrootte?

Ik heb een Python programmaatje gemaakt, die door middel van rechthoeken tekenen de oppervlakte onder een grafiek benaderd.
Dit is de code:
import math, time
xl=0#Linkergrens domein
xr=math.pi#Rechtergrens domein
x=xl
def formule():
y=math.sin(x)#formule
return y
dx=0.00000001#stapgrootte
opp=0
tb=time.time()
while(x<xr):
opp+=formule()*dx
x+=dx

print("Oppervlakte is "+str(opp))
print("Runtime was "+str(float(time.time()-tb))+" seconden.")
input()

Nu heb ik de stapgrootte gevarieerd (de resultaten staan toegevoegd als afbeelding), en ik zie dat het antwoord steeds nauwkeurig wordt, wanneer ik de stapgrootte kleiner maak, maar zodra ik de stapgrootte verklein van 0.000001 naar 0.0000001, wordt het antwoord juist onnauwkeuriger, en wanneer ik de stapgrootte nog kleiner maakt, wordt het nog onnauwkeurig. Het exacte antwoord hoort 2 te zijn. Hoe kan dit?

Verwijderde gebruiker
6 jaar geleden
2.2K

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Het beste antwoord

Er zijn grenzen aan de precisie van floating point getallen in Python. Bij elke berekening van de oppervlakte is er al een kleine afwijking/afronding, dus als je heel veel getallen gaat optellen die elk een afwijking hebben, dan kan dat iets uit de hand lopen.
(Lees meer...)
gvrox
6 jaar geleden
Verwijderde gebruiker
6 jaar geleden
Dankjewel voor je antwoord, ik had al zo een vermoeden dat het daarmee te maken had

Andere antwoorden (1)

Je tabel laat zien dat het antwoord juist nauwkeuriger wordt bij een kleinere stapgrootte.
Stap 1.00000000, %afwijking 5.405579015327735
Stap 0.00000001, %afwijking 0.0000003864538
Je vergeet te kijken naar 10^-7
(Lees meer...)
Verwijderde gebruiker
6 jaar geleden
Verwijderde gebruiker
6 jaar geleden
Nee, dat heb ik gezien, maar ik heb het vooral over de laatste drie metingen 0.000001, 0.0000001 en 0.00000001

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 5000
Gekozen afbeelding