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?

Weet jij het antwoord?

/2500

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.

Bronnen:
https://docs.python.org/2/tutorial/floatin...

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

Stel zelf een vraag

Ben je op zoek naar het antwoord die ene vraag die je misschien al tijden achtervolgt?

/100