19/02/2010, 21:43:52
Effectivement, il y a une erreur
On 19 fév, 18:43, Pascal <pb115...@pabr.org> wrote:
> Bonjour,
>
> On Feb 18, 2:01 pm, "Chrisophe Bruchez" <i...@accessnight.ch> wrote:
>
>
>
> > exemple ESI5 :
>
> > $knxval = hex($val[0]) * 256 + hex($val[1]);
>
> > if (($knxval & 0x8000) != 0) { $sign = 1; } else { $sign = 0; }
> > $exp = ($knxval >> 11) & 0x0f;
> > $mant = $knxval & 0x07ff;
>
> > if ($sign != 0) {
> > # 2-complement
> > $mant -= 1;
> > $mant = ($mant ^0x07ff) & 0x07ff;
> > }
>
> > $val = $mant * (2 ** $exp) * 0.01;
>
> > if ($sign != 0) { $val = -1 * $val; }
>
> Juste par curiosité, et pour valider ma propre implémentation :
> Pour 0x8000 le script ci-dessus renvoie la valeur 0.
> Le résultat ne devrait-il pas être -20,48 ?
On 19 fév, 18:43, Pascal <pb115...@pabr.org> wrote:
> Bonjour,
>
> On Feb 18, 2:01 pm, "Chrisophe Bruchez" <i...@accessnight.ch> wrote:
>
>
>
> > exemple ESI5 :
>
> > $knxval = hex($val[0]) * 256 + hex($val[1]);
>
> > if (($knxval & 0x8000) != 0) { $sign = 1; } else { $sign = 0; }
> > $exp = ($knxval >> 11) & 0x0f;
> > $mant = $knxval & 0x07ff;
>
> > if ($sign != 0) {
> > # 2-complement
> > $mant -= 1;
> > $mant = ($mant ^0x07ff) & 0x07ff;
> > }
>
> > $val = $mant * (2 ** $exp) * 0.01;
>
> > if ($sign != 0) { $val = -1 * $val; }
>
> Juste par curiosité, et pour valider ma propre implémentation :
> Pour 0x8000 le script ci-dessus renvoie la valeur 0.
> Le résultat ne devrait-il pas être -20,48 ?