Что значит иметь uselongdouble undefined, но d_longdbl определен в конфигурации сборки Perl? - PullRequest
3 голосов
/ 16 сентября 2010

Большинство установок Perl, которые я использую, имеют значение longlouble undefined, но определено d_longdbl.Буквально я предполагаю, что это означает, что длинные двойные числа не используются в качестве типа с плавающей запятой по умолчанию, но длинные двойные «поддерживаются».Я не совсем понимаю, что значит «поддерживать» длинных пар.Насколько я знаю, в Perl нет механизма для приведения или повышения точности по умолчанию.Как бы вы добавили длинный дубль в Perl-программу, если тип с плавающей запятой по умолчанию является ванильным двойником.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

d_longdbl просто говорит, что в среде, в которой построен perl, есть поддержка длинных парных чисел.

Это приводит к установке макроса C HAS_LONG_DOUBLE, который является обязательным условием для USE_LONG_DOUBLE и включает модификаторы L и ll s / printf.

(Он также доступен для модулей XS, которые могут свободно изменять поведение на его основе.)

0 голосов
/ 16 сентября 2010

Вы можете проверить поддержку длинных пар во время выполнения с помощью модуля Config.Вот пример кода из perldoc, который показывает использование:

  use Config;
    if ($Config{uselongdouble} eq "define") {
    print "long doubles by default\n";
    }

Этот пример взят из раздела sprintf (который я только что прочитал ...), и есть другиепримеров там.

Что касается кастинга или продвижения по службе, я не думаю, что вы можете.Perl использует самый длинный double для всей математики, включая целочисленную математику.(если вы не задействуете прагму use integer)

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