.\" Automatically generated by Pod::Man 2.09 (Pod::Simple 3.04) .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "PERLNUMBER 1" .TH PERLNUMBER 1 "2006-03-22" "DocFr" "User Contributed Perl Documentation" .SH "NAME/NOM" .IX Header "NAME/NOM" perlnumber \- Se\*'mantique des nombres et ope\*'rations nume\*'riques en Perl .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 7 \& $n = 1234; # entier en de\*'cimal \& $n = 0b1110011; # entier en binaire \& $n = 01234; # entier en octal \& $n = 0x1234; # entier en hexadecimal \& $n = 12.34e\-56; # notation exponentielle \& $n = "\-12.34e56"; # nombre spe\*'cifie\*' sous forme de chai\*^ne \& $n = "1234"; # nombre spe\*'cifie\*' sous forme de chai\*^ne .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" Ce document de\*'crit comment Perl manipule les valeurs nume\*'riques en interne. .PP Les possibilite\*'s de surcharge d'ope\*'rateurs en Perl sont comple\*`tement ignore\*'es ici. La surcharge d'ope\*'rateurs permet a\*` l'utilisateur d'adapter le comportement des nombres pour obtenir, par exemple, des ope\*'rations sur des entiers ou des flottants en pre\*'cision arbitraire ou des ope\*'rations sur des nombres \*(L"exotiques\*(R" telles l'arithme\*'tique modulaire ou l'arithme\*'tique p\-adique et ainsi de suite. Voir overload pous plus de de\*'tails. .SH "Stockage des nombres" .IX Header "Stockage des nombres" Perl, en interne, peut repre\*'senter un nombre de trois manie\*`res diffe\*'rentes\ : comme un entier natif, comme un flottant natif et comme une chai\*^ne de caracte\*`res en de\*'cimal. Les chai\*^nes de caracte\*`res en de\*'cimal peuvent contenir un exposant, comme dans \&\f(CW"12.34e\-56"\fR. \fINatif\fR signifie ici \*(L"un format reconnu par le compilateur C qui a e\*'te\*' utilise\*' pour construire perl\*(R". .PP Le terme \*(L"natif\*(R" n'a pas autant d'implications lorsqu'on parle d'entiers natifs que quand on parle de flottants natifs. La seule implication du terme \*(L"natif\*(R" applique\*' aux entiers est que les limites maximales et minimales accepte\*'es pour une quantite\*' entie\*`re sont tre\*`s proches d'une puissance de 2. En revanche, les flottants \*(L"natifs\*(R" ont plus de restrictions\ : ils ne peuvent repre\*'senter que des nombres qui ont une repre\*'sentation relativement \*(L"courte\*(R" lorsqu'ils sont convertis en base 2. Par exemple, 0.9 ne peut pas e\*^tre repre\*'sente\*' par un flottant natif puisque son e\*'criture en base 2 est infinie\ : .PP .Vb 1 \& 0.1110011001100... .Ve .PP avec la se\*'quence \f(CW1100\fR qui se re\*'pe\*`te inde\*'finiment ensuite. En plus de la limitation pre\*'ce\*'dente, la partie exposant du nombre est, elle aussi, limite\*'e lorsqu'elle est repre\*'sente\*'e par un flottant. Sur la plupart des mate\*'riels, les valeurs flottantes peuvent stocker des nombres contenant au plus 53 chiffres binaires avec une partie exposant comprise entre \-1024 et 1024. Une fois ramene\*'es en de\*'cimale, ces limites donnent environ 16 chiffres significatifs et une puissance de dix comprises entre \-304 et 304. Une conse\*'quence de tout cela est donc que, sur de telles architectures, Perl ne peut pas stocker dans un flottant un nombre comme 12345678901234567 sans perdre d'information. .PP De manie\*`re similaire, les chai\*^nes de caracte\*`res en de\*'cimal ne peuvent repre\*'senter que des nombres dont la repre\*'sentation de\*'cimale est finie. Comme ce sont des chai\*^nes, et donc de longueur quelconque, il n'y a pratiquement pas de limite pour l'exposant ou le nombre de de\*'cimales de tels nombres. (Mais n'oubliez pas que nous ne parlons que des re\*`gles de \fIstockage\fR de ces nombres. Que vous puissiez effectivement stocker des \*(L"grands\*(R" nombres n'implique pas que vous pourrez re\*'aliser des \fIope\*'rations\fR sur ces nombres utilisant tous les chiffres disponibles. Voir \*(L"Ope\*'rateurs et conversions nume\*'riques\*(R" pour plus de de\*'tails.) .PP Dans les faits, les nombres stocke\*'s au format natif entier peuvent l'e\*^tre sous leur forme avec ou sans signe. Donc, en Perl, les limites pour les entiers stocke\*'s au format natif sont typiquement \&\-2**31..2**32\-1, valeurs a\*` adapter dans le cas des entiers sur 64 bits. Encore une fois, cela ne signifie pas que Perl peut faire des ope\*'rations uniquement sur des entiers dans cet intervalle\ :\ il est possible de stocker bien plus d'entiers en utilisant le format flottant. .PP En re\*'sume\*', les valeurs nume\*'riques que Perl peut stocker sont celles qui ont une repre\*'sentation de\*'cimale finie ou une \*(L"courte\*(R" repre\*'sentation binaire. .SH "Ope\*'rateurs et conversions nume\*'riques" .IX Header "Ope'rateurs et conversions nume'riques" Perl peut stocker un nombre dans n'importe lequel des trois formats mentionne\*'s ci-dessus mais, typiquement, la plupart des ope\*'rateurs ne comprennent qu'un seul de ces formats. Lorsqu'une valeur nume\*'rique est passe\*'e comme argument a\*` l'un de ces ope\*'rateurs, elle est convertie vers le format compris par l'ope\*'rateur. .PP Six conversions sont donc possibles\ : .PP .Vb 6 \& entier natif \-\-> flottant natif (*) \& entier natif \-\-> chai\*^ne de\*'cimale \& flottant natif \-\-> entier natif (*) \& flottant natif \-\-> chai\*^ne de\*'cimale (*) \& chai\*^ne de\*'cimale \-\-> entier natif \& chai\*^ne de\*'cimale \-\-> flottant natif (*) .Ve .PP Ces conversions suivent les re\*`gles ge\*'ne\*'rales suivantes\ : .IP "\(bu" 4 Si le nombre d'origine peut e\*^tre repre\*'sente\*' sous la forme vise\*'e, cette repre\*'sentation est utilise\*'e. .IP "\(bu" 4 Si le nombre d'origine est en dehors des limites repre\*'sentables par la forme vise\*'e, la repre\*'sentation choisie est celle de la limite la plus proche. (\fIperte d'information\fR) .IP "\(bu" 4 Si le nombre d'origine est compris entre deux nombres repre\*'sentables par la forme vise\*'e, la repre\*'sentation de l'un de ces deux nombres est utilise\*'e. (\fIperte d'information\fR) .IP "\(bu" 4 Lors de la conversion \f(CW\*(C`flottant natif \-\-> entier natif\*(C'\fR, la partie entie\*`re du re\*'sultat est toujours infe\*'rieure ou e\*'gale a\*` la partie entie\*`re de la valeur d'origine. (\fI\*(L"arrondi vers ze\*'ro\*(R"\fR) .IP "\(bu" 4 Si la conversion \f(CW\*(C`chai\*^ne de\*'cimale \-\-> entier natif\*(C'\fR ne peut pas e\*^tre re\*'alise\*'e sans perte d'information, le re\*'sultat est compatible avec la suite de conversions \f(CW\*(C`chai\*^ne de\*'cimale \-\-> flottant natif \&\-\-> entier natif\*(C'\fR. En particulier, cela donne une chance a\*` un nombre tel que \f(CW"0.99999999999999999999"\fR d'e\*^tre arrondi a\*` 1. .PP \&\fB\s-1RESTRICTION\s0\fR\ : les conversions ci-dessus marque\*'es d'une \f(CW\*(C`*\*(C'\fR sont en partie effectue\*'s par le compilateur C. Donc, des bogues ou des particularite\*'s du compilateur utilise\*' peuvent parfois amener au non respect de certaines des re\*`gles ci\-dessus. .SH "Un avant\-gou\*^t des ope\*'rations nume\*'riques en Perl" .IX Header "Un avant-gou^t des ope'rations nume'riques en Perl" Les ope\*'rations Perl qui prennent un argument nume\*'rique traitent cet argument selon l'une des quatre manie\*`res suivantes\ : soit elles le transforment vers l'un des trois formats entier, flottant ou chai\*^ne de\*'cimale, soit elles se comportent diffe\*'rement selon le format d'origine de l'argument. La conversion de la valeur nume\*'rique vers un format particulier ne change pas le nombre stocke\*' dans la valeur. .PP Tous les ope\*'rateurs qui ne\*'cessitent un argument au format entier traitent leur argument en arithme\*'tique modulaire, par exemple \f(CW\*(C`mod 2**32\*(C'\fR sur une architecture 32\-bits. \f(CW\*(C`spintf "%u", \-1\*(C'\fR fournira donc le me\*^me re\*'sultat que \f(CW\*(C`spintf "%u", ~0\*(C'\fR. .IP "Les ope\*'rateurs arithme\*'tiques" 4 .IX Item "Les ope'rateurs arithme'tiques" Les ope\*'rateurs binaires \f(CW\*(C`+\*(C'\fR, \f(CW\*(C`\-\*(C'\fR, \f(CW\*(C`*\*(C'\fR, \f(CW\*(C`/\*(C'\fR, \f(CW\*(C`%\*(C'\fR, \f(CW\*(C`==\*(C'\fR, \f(CW\*(C`!=\*(C'\fR, \&\f(CW\*(C`>\*(C'\fR, \f(CW\*(C`<\*(C'\fR, \f(CW\*(C`>=\*(C'\fR et \f(CW\*(C`<=\*(C'\fR ainsi que les ope\*'rateurs unaires \f(CW\*(C`\-\*(C'\fR, \f(CW\*(C`abs\*(C'\fR et \f(CW\*(C`\-\-\*(C'\fR essayeront de convertir leurs arguments en entiers. Si les deux conversions sont possibles sans perte de pre\*'cision et si l'ope\*'ration peut e\*^tre effectue\*'e sans perte de pre\*'cision alors un re\*'sultat entier sera produit. Sinon les arguments sont convertis en flottant et le re\*'sultat sera un flottant. Les conversions utilisant une sorte de cache (comme de\*'crit ci\-dessous), les conversions vers des entiers ne perdront pas la partie de\*'cimale des nombres flottants. .IP "++" 4 \&\f(CW\*(C`++\*(C'\fR se comportent comme les ope\*'rateurs ci-dessus sauf si son argument est une chai\*^ne de caracte\*`res qui est reconnue par l'expression rationnelle \f(CW\*(C`/^[a\-zA\-Z]*[0\-9]*\ez/\*(C'\fR. Dans ce dernier cas, c'est l'incre\*'mentation de chai\*^ne de\*'crite dans perlop qui est utilise\*'e. .ie n .IP "Les ope\*'rateurs arithme\*'tiques lorsque ""use integrer"" est actif" 4 .el .IP "Les ope\*'rateurs arithme\*'tiques lorsque \f(CWuse integrer\fR est actif" 4 .IX Item "Les ope'rateurs arithme'tiques lorsque use integrer est actif" Si \f(CW\*(C`use integrer;\*(C'\fR est actif, la quasi totalite\*' des ope\*'rateurs liste\*'s ci-dessus convertissent leur(s) argument(s) au format entier et retourne un re\*'sultat entier. Les exceptions sont \f(CW\*(C`abs\*(C'\fR, \f(CW\*(C`++\*(C'\fR et \&\f(CW\*(C`\-\-\*(C'\fR qui ne changent pas leur comportement. .IP "Les autres ope\*'rateurs mathe\*'matiques" 4 .IX Item "Les autres ope'rateurs mathe'matiques" Les ope\*'rateurs tels que \f(CW\*(C`**\*(C'\fR, \f(CW\*(C`sin\*(C'\fR et \f(CW\*(C`exp\*(C'\fR convertissent leurs arguments vers le format flottant. .IP "Les ope\*'rateurs bit\-a\*`\-bit" 4 .IX Item "Les ope'rateurs bit-a`-bit" Les arguments sont convertis au format entier si ce ne sont pas des chai\*^nes de caracte\*`res. .ie n .IP "Les ope\*'rateurs bit\-a\*`\-bit lorsque ""use integrer"" est actif" 4 .el .IP "Les ope\*'rateurs bit\-a\*`\-bit lorsque \f(CWuse integrer\fR est actif" 4 .IX Item "Les ope'rateurs bit-a`-bit lorsque use integrer est actif" Les arguments sont convertis au format entier. De plus les ope\*'rations internes de de\*'calage utilisent des entiers signe\*'s au lieu des non signe\*'s par de\*'faut. .IP "Les ope\*'rations qui attendent un entier" 4 .IX Item "Les ope'rations qui attendent un entier" L'argument est converti au format entier. Ceci s'applique, par exemple, au troisie\*`me et au quatrie\*`me argument de \f(CW\*(C`sysread\*(C'\fR. .IP "Les ope\*'rations qui attendent une chai\*^ne" 4 .IX Item "Les ope'rations qui attendent une chai^ne" L'argument est converti au format chai\*^ne de\*'cimale. Par exemple, cela s'applique a\*` . .PP Bien que la conversion d'un argument vers un format particulier ne change pas le nombre stocke\*', Perl se souvient du re\*'sultat de ces conversions. En particulier, bien que la premie\*`re conversion puisse prendre du temps, des ope\*'rations re\*'pe\*'te\*'es n'auront plus a\*` refaire cette conversion. .SH "AUTEUR" .IX Header "AUTEUR" Ilya Zakharevich \f(CW\*(C`ilya@math.ohio\-state.edu\*(C'\fR .PP Quelques adaptations par Gurusamy Sarathy .PP Mise a\*` jour pour 5.8.0 par Nicholas Clark .SH "VOIR AUSSI" .IX Header "VOIR AUSSI" overload et perlop. .SH "TRADUCTION" .IX Header "TRADUCTION" .Sh "Version" .IX Subsection "Version" Cette traduction franc\*,aise correspond a\*` la version anglaise distribue\*'e avec perl 5.8.8. Pour en savoir plus concernant ces traductions, consultez . .Sh "Traducteur" .IX Subsection "Traducteur" Paul Gaborit (Paul.Gaborit at enstimac.fr). .Sh "Relecture" .IX Subsection "Relecture" Personne pour l'instant.