Newsgroup: it.comp.lang.visual-basic
Titolo: [?][curiosità] elevamento a potenza

Ecco un indovinello... chi riesce a spiegarmelo?
Provate:
Private Sub Form_Load()
    Dim d1 As Double
    Dim d2 As Double
    On Error Resume Next
    Debug.Print " --- double ---"
    d1 = -16.6
    d2 = 2.1
    Debug.Print d1 ^ d2
    Debug.Print Err.Description
    Debug.Print " --- costanti ---"
    Debug.Print -16.6 ^ 2.1
    Debug.Print Err.Description
End Sub
Perchè l'ultimo contravviene a quanto spiegato nell'help (erroneamente
direi) e non va in errore?
Sembra che l'ultima forma venga interpretata come -(16.6 ^ 2.1) anzichè come
semplice operazione tra due valori...
boh!
Ciao

 
Come dice la guida l'elevamento a potenza viene valutato prima della 
negazione ...
ciao
		maxx

 2.1) anzichè come semplice operazione tra due valori...
Semplice precedenza degli operatori...
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.

 negazione ...
Solo che la guida da queste priorità:
      Negation (-)
      Exponentiation (^)
      Multiplication and division (*, /)
      Integer division (\)
      Modulus arithmetic (Mod)
      Addition and subtraction (+, -)
      String concatenation (&)
      Equality (=)
      Inequality (<>)
      Less than (<)
      Greater than (>)
      Less than or equal to (<=)
      Greater than or equal to (>=)
      Not
      And
      Or
      Xor
      Eqv
      Imp
Ciao


Mi sembrava strano che tu ponessi questa domanda ...
Infatti la mia guida da:
Aritmetici 
		Di confronto 		Logici
Elevazione a potenza (^) 	Uguaglianza (=) 	Not
Negazione (-) 			Disuguaglianza (<>) 	And
Moltiplicazione e divisione (*, /) Minore di (<) 	Or
Divisione tra interi (\) 	Maggiore di (>) 	Xor
Modulo aritmetico (Mod) 	Minore o uguale a (<=) 	Eqv
Addizione e sottrazione (+, -) Maggiore o uguale a (>=) Imp
Concatenamento di stringhe (&) Like Is
Ho anche fatto una ricerca con google e viene riportata questa stessa 
tabella su molti siti. Non che voglia dire qualcosa, ma ... visto il 
risultato del tuo test ...
Tanto per sapere, ma tu che guida usi? :-)
A parte gli scherzi, magari in .net hanno deciso di cambiare qualcosa, 
tanto per farci annoiare, oppure hai visualizzato l'ordine di precedenza 
di qualcos'altro ...
ciao
		maxx

 di qualcos'altro ...
Io parlo di VB6.
Comunque non capisco... forse ho saltato qualche lezione di matematica, ma
quando vedo
-2^3
io lo intendo, visto che il - fa parte del valore che lo segue,
(-2)^3
Che poi dovrebbe coincidere (senza errori!) a
-(2^3)
Devo rivedere i miei concetti algebrici? :)
Basta saperlo, alla fine è solo una questione di convenzioni.
Ciao

 
Il problema e' se l'esponenete non e' intero.
Ho fatto una prova con EasyCalc, una "calcolatrice" che ho sul mio Palm e:
-2^3.2=-9.18958684
(-2)^3.2=- 7.434531925 - 5.401503619 i  !!!!
Probabilmente, dato per scontato che nei calcoli di solito non si usano 
numeri complessi la scrittura
-2^3.2
viene sempre interpretata come
-(2^3.2)
che e' sempre un numero reale.
Mettersi nella testa dei programmatori MS pero' non e' facile ...
;-)
ciao
	maxx


P.S. Grandioso, Mozilla scaricando il mio messaggio dal NG ha deciso di 
piazzare esponenti a caso ...
le operazioni che intendevo sono
meno due elevato a 3.2
e
(meno 2) elevato a 3.2
e
meno (due elevato a 3.2)
mahhh  ...
	maxx

Beh, non chiedere troppo a MS!
scusa ma l'elevamento a potenza 2.1 esiste? cos'è, il quadrato e un
pezzettino?
:))
stiamo parlando di VB, non di Fortran :))
se al posto di 2.1 ci metti 2 funziona, senza errori. E' evidente che più
che per il segno è sull'esponente che si incarta.
ciao
Fabio

 che per il segno č sull'esponente che si incarta.
Questo era effettivamente evidente :)
Come č evidente che mi sembra stupido il comportamento.
Ciao

 scentifica... :(
Non credo che in fortran siano definite operazioni diverse da quelle 
definite in VB, cosi' come sono uguali i tipi di variabile. Forse 10 
anni fa era diverso, ma oggi ...
ciao
		maxx

 anni fa era diverso, ma oggi ...
Oggi mi accorgo che l'informatica non č piů "matematica" ma "empirica" :(
Ciao

 
Assomiglia sempre di piu' al mondo con cui deve interagire....
Una nuova sfida per i programmatori :-)
ciao
		maxx

 Semplice precedenza degli operatori...
Beh, allora VB è scIemo:
-1.1^-2.2 ' Ok
(-1.1)^-2.2 ' Errore
queste cose non dovrebbero succedere!
Sono costretto a sostituire l'espressione con:
if (a < 0)then
    r = -((-a) ^ b)
else
    r = a ^ b
End if
Ciao

 Ciao
Ciao

 massima priorita'
Da qualche parte ho letto che le parentesi vengono risolte, in assoluto, per
prime.

 negative
E lo ripeto di nuovo!
Visto che in R non ha senso fare l'elevamento a potenza per basi 
negative i programmatori di VB lo hanno dato per scontato ed il meno 
davanti alla base diventa un meno davanti a tutta l'operazione.
ciao
		maxx

 queste cose non dovrebbero succedere!
Che dia errore è giusto... il secondo calcolo non è fattibile,
mentre il primo è -(1.1^-2.2)
