Ciao a tutti, ho sviluppato un piccolo programmino per il calcolo dell'integrale definito di una funzione in VB.NET.
Il mio problema è l'estrema imprecisione con cui VB e qualsiasi altro linguaggio di programmazione con cui ho provato (Java, ActionScript, PHP, C), nella somma di due numeri; uno int e l'altro double.
Il codice è il seguente:
Codice PHP:
    Private Sub rettangoli()
        
txtresult.Text += "<RISULTATI tipo='rettangoli'>"
        
If Not (IsNumeric(TextBox1.Text)) Or Not (IsNumeric(TextBox2.Text)) Or Not (IsNumeric(TextBox3.Text)) Then
            txtresult
.Text += "ERRORE: TIPO DATI ERRATI"
            
GoTo exith
        End 
If
        
Dim a As Integer CInt(TextBox1.Text)
        
Dim b As Integer CInt(TextBox2.Text)
        
Dim n As Integer CInt(TextBox3.Text)
        
Dim h As Double
        h 
= (a) / n
        Dim ss 
As Double 0
        Dim xi 
As Double a
        
Do While xi <= (h)
            
ss ss * (/ (+ (xi xi)))
            
xi xi h
            txtresult
.Text += ("<XI>" xi "</XI>" " <SS>" ss "</SS>" "<H> " "</H>")
            
Debug.Print(ss)
        
Loop
        Dim sd 
As Double 0
        xi 
h
        
Do While (xi b)
            
sd sd * (/ (+ (xi xi)))
            
xi xi h
        Loop
        Dim hint 
As Double = (ss sd) / 2
        Dim err 
As Double ss sd
exith
:
        
txtresult.Text += "<RESULT>" hint " " err "</RESULT></RISULTATI>"
    
End Sub 
L'output di questo programma mostra, con n = 100, alla 80° iterazione è :
Codice PHP:
[...]
  <
SS>2,65725035665318</SS
  <
H>0,01</H
  <
XI>0,79</XI
  <
SS>2,682119792117</SS
  <
H>0,01</H
  <
XI>0,8</XI
  <
SS>2,70674881742332</SS
  <
H>0,01</H
  <
XI>0,810000000000001</XI
  <
SS>2,73113906132576</SS
  <
H>0,01</H
  <
XI>0,820000000000001</XI
  <
SS>2,75529219217535</SS
  <
H>0,01</H
  <
XI>0,830000000000001</XI
  <
SS>2,77920991520811</SS
  <
H>0,01</H
  <
XI>0,840000000000001</XI
  <
SS>2,80289396991828</SS
  <
H>0,01</H
  <
XI>0,850000000000001</XI
  <
SS>2,82634612751678</SS
  <
H>0,01</H
  <
XI>0,860000000000001</XI
  <
SS>2,84956818847469</SS
  <
H>0,01</H
[...] 
Ora, a casa mia 0,8 + 0,01 = 0,81 e non 0,810000000000001.
Da cosa può essere causato questo errore?