Главная страница


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.
 самом деле Перл хранит скаляр в одном из возможных
 представлений автоматически переводя его в другое если
 хранение его в старом виде приводит к потере точности.
 
 $ 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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: int64   Andrey Sapozhnikov   10 Oct 2002 22:42:42 
Архивное /ru.perl/65776d59b343.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional