Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] Subdolo baco di programmazione

Lo so, i bachi di programmazione devono ricadere come mannaie sul collo
della povera code-monkey di turno, ma questo e' veramente fetente...
Private Sub MiaSub()
dim iConto as integer
dim Passo as single
  ...
  Passo = 0.5
  ...
  for iConto = 1 to 10 step Passo
    ...
    ...
  next
  ...
  ...
End Sub
...e sono anche stato 1 ora a chiedermi perche' non usciva mai dal
ciclo...
Bye by SixaM 8-]
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Ciao
Si, lo so anch'io che c'e' l'arrotondamento. semplicemente, a prima
vista non salta in mente che la non uscita dal ciclo dipenda da
quello...


 ha scritto nel messaggio
news:9ffb62fdebc7a20ce2c...@mygate.mailgate.org...

Io credo sia normale che fare un ciclo su una variabile intera con uno step


 Bye by SixaM 8-]
eh eh
devo dire che c'ho pensato per 20 secondi anche io...ma perchè ero in
allarme dal topic....
in questi casi un bel warning per un cast implicito ci starebbe no?
per i newbie
senza far impallare il pc come ha fatto sixam
Option Explicit
Private Sub Form_Load()
Dim n As Integer
Dim t As Single
t = 0.5
n = t
MsgBox (CStr(n))
End Sub
visto?
:-)
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici

 soffra di implicitcasting-ite acuta.
Dipende.
Io programmo in C/C++ con Win32, definendo STRICT puoi avere degli errori
di compilazione anche se fai una cosa del genere:
HWND handle;	// Valore che è a 32 bit
int value;	// Valore che è a 32 bit
value=handle; <--- Warning o errore in compilazione, devi fare
value=(int)handle;
Stefano "HappyMan" (Lake Maggiore - Italy)
-- 
The Personal Framework for Object Oriented Windows Development (Win32)
http://www.sgr.info
Email happyman69 (at) 
libero.it

 in questi casi un bel warning per un cast implicito ci starebbe no?
Ci starebbe eccome...peccato che VB (come credo anche il C) sembra
soffra di implicitcasting-ite acuta.
Ad esempio:
[aprire la finestra di debug con CTRL+G]
print 30000*2 <-- Overflow! (VB vede due INTEGER, e sbatte il risultato
nella variabile piu' piccola che li puo' contenere, quindi INTEGER)
print 30000*clng(2) <-- OK!!!
 60000 


 ciclo...
Adesso prova questo che č ancora piů subdolo:
Dim b As Byte
For b = 6 To 1 Step -1
    Debug.Print b
Next
termoPilucco
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 quello...
La stessa MSDN sconsiglia di usare variabili decimali per i cicli For,
perchè appunto il risultato potrebbe essere "imprevedibile".
Ciao

 Ciao
...e le madonne che gli stanno tirando dietro i programmatori in giro
per il mondo non le hanno previste?


 termoPilucco
Mmmm...perche' da' 'Overflow'? Mi sarei aspettato che non uscisse dal
ciclo... non e' che il -1 nella clausola STEP lo incasina? Altro caso di
imlicitcasting-ite!


 imlicitcasting-ite!
L'hai detto tu prima: VB fa il "cast" al tipo più piccolo, solo che Byte non
contempla -1
Ciao

per il mondo non le hanno previste?
Nonono...non dipende da M$.
Mai fare confornti di uguaglianza con i numeri decimali.
In nessun linguaggio.
termoPilucco

 In nessun linguaggio.
Infatti ha ragione termopilucco,
sono sempre dell'avviso che i programmatori
dal primo all'ultimo dovrebbero avere qualche rudimento
di calcolo numerico.
    danilo

 di calcolo numerico.
ecco.. ho creato una riga che mostra come due numeri uguali siano visti
come diversi :
a=0.000005: b=10000000000: ? b+a+a+a+a+a+a+a+a+a+a =
b+(a+a+a+a+a+a+a+a+a+a)
Questo avviene perchè, per come funzionano i numeri a virgola mobile,
(numero molto grande)+(numero molto piccolo)=numero molto grande
(risultato ovviamente errato ma non inaspettato),
mentre (numero molto grande)+(numero non troppo piccolo)=risultato corretto
Quindi ogni volta che sommo A a B ottengo sempre B, ma se sommo prima
tutte le A ottengo un numero abbastanza grande da influire su B
Insomma, bisogna conoscere gli strumenti che si usano.
