svn: /phpdoc/ru/trunk/language/types/ float.xml

From: Date: Tue, 23 Nov 2010 07:47:10 +0000
Subject: svn: /phpdoc/ru/trunk/language/types/ float.xml
Groups: php.doc.ru 
Request: Send a blank email to doc-ru+get-1189@lists.php.net to get a copy of this message
shein Tue, 23 Nov 2010 07:47:10 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=305681 Log: Renewed translation. Changed paths: U phpdoc/ru/trunk/language/types/float.xml Modified: phpdoc/ru/trunk/language/types/float.xml =================================================================== --- phpdoc/ru/trunk/language/types/float.xml 2010-11-23 05:15:20 UTC (rev 305680) +++ phpdoc/ru/trunk/language/types/float.xml 2010-11-23 07:47:10 UTC (rev 305681) @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- EN-Revision: 301112 Maintainer: shein Status: ready --> +<!-- EN-Revision: 305581 Maintainer: shein Status: ready --> <!-- Reviewed: no --> <!-- $Id$ --> <sect1 xml:id="language.types.float"> @@ -45,22 +45,30 @@ <title>Точность чисел с плавающей точкой</title> <para> - Довольно часто простые десятичные дроби вроде <literal>0.1</literal> - или <literal>0.7</literal> не могут быть преобразованы в их внутреннюю двоичную форму + Числа с плавающей точкой имеют ограниченную точность. Хотя это + зависит от операционной системы, в PHP обычно используется формат + двойной точности IEEE 754, дающий максимальную относительную ошибку + округления порядка 1.11e-16. + Неэлементарные арифметические операции могут давать большие ошибки, + и, разумеется, необходимо принимать во внимание разрастание ошибок + при совместном использовании нескольких операции. + </para> + + <para> + Кроме того, рациональные числа, которые могут быть точно представлены + в виде чисел с плавающей точкой с основанием 10, например, + <literal>0.1</literal> или <literal>0.7</literal>, не имеют + точного внутреннего представления в качестве чисел с плавающей точкой + с основанием 2, вне зависимости от размера мантиссы. + Поэтому они и не могут быть преобразованы в их внутреннюю двоичную форму без небольшой потери точности. Это может привести к неожиданным результатам: например, <literal>floor((0.1+0.7)*10)</literal> скорее всего вернет <literal>7</literal> вместо ожидаемого <literal>8</literal>, так как результат внутреннего представления будет чем-то вроде - <literal role="infdec">7.9</literal>. + <literal>7.9999999999999991118...</literal>. </para> <para> - Это связано с невозможностью точно выразить некоторые дроби в десятичной системе - счисления конечным числом цифр. Например, <literal>1/3</literal> в десятичной форме - принимает вид <literal role="infdec">0.3</literal>. - </para> - - <para> Так что никогда не доверяйте точности чисел с плавающей точкой до последней цифры, и никогда не проверяйте их на равенство. Если вам действительно необходима высокая точность, используйте

« previous php.doc.ru (#1189) next »