Есть ли более быстрый способ получить биты с плавающей запятой, чем pack / unpack в Perl? - PullRequest
0 голосов
/ 02 июля 2019

Есть ли более быстрый способ получить биты с плавающей запятой, чем pack / unpack в Perl?Не обязательно быть IEEE754

1 Ответ

3 голосов
/ 02 июля 2019

Ваш вопрос не имеет смысла. Вы просите быстрый способ сделать что-то медленный путь. Если бы мы знали, что вы действительно хотели бы сделать , мы могли бы предложить лучшее решение.

use strict;
use warnings;
use feature qw( say );

use Inline C => <<'__EOS__';

   void cast_double_to_uv(SV* sv) {
      dXSARGS;

      double d = (double)SvNV(sv);
      UV uv;

      if (sizeof(uv) < sizeof(double))
         croak("Integers too small to hold a double.");

      if (BYTEORDER == 0x1234) {
         /* Little-endian */
         memcpy(&uv, &d, sizeof(double));

         if (sizeof(uv) > sizeof(double))
            memset(((char*)&uv)+sizeof(double), 0, sizeof(double)-sizeof(uv));
      } else {
         /* Big-endian */
         if (sizeof(uv) > sizeof(double))
            memset(&uv, 0, sizeof(double)-sizeof(uv));

         memcpy(((char*)&uv)+sizeof(double)-sizeof(uv), &d, sizeof(double));
      }

      XSRETURN_UV(uv);
   }

__EOS__

say cast_double_to_uv(5.5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...