|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Andrey Sapozhnikov 2:5020/400 10 Oct 2002 22:42:42 To : Eugene Grosbein Subject : Re: int64 --------------------------------------------------------------------------------
Eugene Grosbein wrote:
> 10 окт 2002, четверг, в 10:34 KRAST, Artem Chuprina написал(а):
>
> AC>>> В доке написано, что без use integer он вообще не обрабатывает целые.
> EG>> А суммирование он святым духом выполняет, или через floating point?
> AC> Через double. Hу прочти эту доку, оно ж быстрее.
>
> Которую? perlnumber нет в stock perl 5.005_03 от FreeBSD 4.6.
Hа самом деле Перл хранит скаляр в одном из возможных
представлений автоматически переводя его в другое если
хранение его в старом виде приводит к потере точности.
$ perl -MDevel::Peek
$a=0xfffffffe;
Dump $a;
$a=$a+1;
Dump $a;
$a=$a+1;
Dump $a;
^D
------------ out ------------
SV = IV(0x8064594) at 0x8061338
REFCNT = 1
FLAGS = (IOK,pIOK,IsUV)
UV = 4294967294
# изначально беззнаковое целое
SV = IV(0x8064594) at 0x8061338
REFCNT = 1
FLAGS = (IOK,pIOK,IsUV)
UV = 4294967295
# все еще беззнаковое целое
SV = PVNV(0x807d7b0) at 0x8061338
REFCNT = 1
FLAGS = (NOK,pNOK)
IV = -1
NV = 4294967296
PV = 0
# автоматически стало вещественным
еще:
$ perl -MDevel::Peek
$a=123;
Dump $a;
$a/=2;
Dump $a;
$a|=127;
Dump $a;
$a.='wow';
Dump $a;
^D
-------------- out -------------
SV = IV(0x8064594) at 0x8061338
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 123
# изначально знаковое целое
SV = PVNV(0x807d7b0) at 0x8061338
REFCNT = 1
FLAGS = (NOK,pNOK)
IV = 123
NV = 61.5
PV = 0
# автоматически стало вещественным поскольку
# не делилось на 2 без остатка
SV = PVNV(0x807d7b0) at 0x8061338
REFCNT = 1
FLAGS = (IOK,pIOK)
IV = 127
NV = 61.5
PV = 0
# Побитовая операция требовала целочисленного
# скаляр стал целочисленным
SV = PVNV(0x807d7b0) at 0x8061338
REFCNT = 1
FLAGS = (POK,pPOK)
IV = 127
NV = 61.5
PV = 0x8064ad0 "127wow"\0
CUR = 6
LEN = 7
# а теперь он в строковом представлении
use integer же запрещает апгрейд integer/unsigned integer (IV/UV)
скаляров в numeric (NV) при возможной потере точности.
Андрей
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/65776d59b343.html, оценка из 5, голосов 10
|