Page 1 sur 1

hex(2^0)

Posté : mar. 14 mars 2017 19:44
par mdanielm
Le résultat est 3FF, c'est curieux non ?

Re: hex(2^0)

Posté : mar. 14 mars 2017 22:41
par jchd
Pas vraiment. ConsoleWrite(Hex(1.0) & @LF) donne la même chose et pour cause : 2^0 donne un double (= 1.0) dont l'image hexa est ...

Re: hex(2^0)

Posté : mar. 14 mars 2017 23:07
par mdanielm
Donc, 2^0 est un double et 2^n est un integer pour n>0 ?
Encore plus curieux!
for $i=0 to 10
   consolewrite(hex(2^$i) & @crlf)
Next

Re: hex(2^0)

Posté : mer. 15 mars 2017 09:12
par mdanielm
Je persiste à croire qu'il y a malfaçon dans la construction de x^y et je demande à voir le code.
Il faut étudier 3 cas:
x^y pour y entier positif (multiplication répétitive et x^0=1 comme C(n,0)=1)
x^y pour y entier négatif et x<>0 ( x^y = 1/(x^-y) )
x^y = exp(y*ln(x)) pour x>0 et y quelconque, même 0
func P($x,$y) ; x^y
   if IsInt($y) then
      if $x=0 then return ($y<=0 ? "ERREUR" : 0)
      if $y=0 then return 1
      Local $r=1
      for $i=1 to abs($y)
         $r *= $x
      Next
      return ($y>0 ? $r : 1/$r)
   Else
      return ($x>0 ? Exp($y*Log($x)) : "ERREUR")   
   endif
EndFunc
hex(P(2,0)) donne alors le résultat attendu, (celui donné par tous les langages de programmation, y compris ceux des calculatrices scientifiques)