@@ -393,6 +393,10 @@ msgid ""
393393"statistical operations supplied by the SciPy project. See "
394394"<https://scipy.org>."
395395msgstr ""
396+ "Если вы активно пользуетесь вычислениями с плавающей точкой, вам следует "
397+ "взглянуть на пакет NumPy и многие другие пакеты для математических и "
398+ "статистических операций, поставляемые проектом SciPy. См. "
399+ "<https://scipy.org>."
396400
397401#: ../../tutorial/floatingpoint.rst:181
398402msgid ""
@@ -401,49 +405,69 @@ msgid ""
401405":meth:`float.as_integer_ratio` method expresses the value of a float as a "
402406"fraction:"
403407msgstr ""
408+ "Python предоставляет инструменты, которые могут помочь в тех редких случаях,"
409+ " когда вы *действительно* хотите узнать точное значение числа с плавающей "
410+ "точкой. Метод :meth:`float.as_integer_ratio` выражает значение float в виде "
411+ "дроби:"
404412
405413#: ../../tutorial/floatingpoint.rst:186
406414msgid ""
407415">>> x = 3.14159\n"
408416">>> x.as_integer_ratio()\n"
409417"(3537115888337719, 1125899906842624)"
410418msgstr ""
419+ ">>> x = 3.14159\n"
420+ ">>> x.as_integer_ratio()\n"
421+ "(3537115888337719, 1125899906842624)"
411422
412423#: ../../tutorial/floatingpoint.rst:192
413424msgid ""
414425"Since the ratio is exact, it can be used to losslessly recreate the original"
415426" value:"
416427msgstr ""
428+ "Поскольку это отношение точное, его можно использовать для воссоздания "
429+ "исходного значения без потерь:"
417430
418431#: ../../tutorial/floatingpoint.rst:195
419432msgid ""
420433">>> x == 3537115888337719 / 1125899906842624\n"
421434"True"
422435msgstr ""
436+ ">>> x == 3537115888337719 / 1125899906842624\n"
437+ "True"
423438
424439#: ../../tutorial/floatingpoint.rst:200
425440msgid ""
426441"The :meth:`float.hex` method expresses a float in hexadecimal (base 16), "
427442"again giving the exact value stored by your computer:"
428443msgstr ""
444+ "Метод :meth:`float.hex` выражает число с плавающей точкой в "
445+ "шестнадцатеричном виде (по основанию 16), снова предоставляя точное "
446+ "значение, сохраненное на вашем компьютере:"
429447
430448#: ../../tutorial/floatingpoint.rst:203
431449msgid ""
432450">>> x.hex()\n"
433451"'0x1.921f9f01b866ep+1'"
434452msgstr ""
453+ ">>> x.hex()\n"
454+ "'0x1.921f9f01b866ep+1'"
435455
436456#: ../../tutorial/floatingpoint.rst:208
437457msgid ""
438458"This precise hexadecimal representation can be used to reconstruct the float"
439459" value exactly:"
440460msgstr ""
461+ "Это точное шестнадцатеричное представление можно использовать для "
462+ "восстановления значения float в точности:"
441463
442464#: ../../tutorial/floatingpoint.rst:211
443465msgid ""
444466">>> x == float.fromhex('0x1.921f9f01b866ep+1')\n"
445467"True"
446468msgstr ""
469+ ">>> x == float.fromhex('0x1.921f9f01b866ep+1')\n"
470+ "True"
447471
448472#: ../../tutorial/floatingpoint.rst:216
449473msgid ""
@@ -452,6 +476,10 @@ msgid ""
452476"data with other languages that support the same format (such as Java and "
453477"C99)."
454478msgstr ""
479+ "Поскольку представление является точным, оно полезно для надежного переноса "
480+ "значений между разными версиями Python (независимость от платформы) и обмена"
481+ " данными с другими языками, поддерживающими тот же формат (например, Java и "
482+ "C99)."
455483
456484#: ../../tutorial/floatingpoint.rst:220
457485msgid ""
@@ -461,6 +489,11 @@ msgid ""
461489"difference in overall accuracy so that the errors do not accumulate to the "
462490"point where they affect the final total:"
463491msgstr ""
492+ "Ещё одним полезным инструментом является функция :func:`sum`, которая "
493+ "помогает уменьшить потерю точности во время суммирования. Она использует "
494+ "расширенную точность для промежуточных шагов округления по мере добавления "
495+ "значений к сумме. Это может повлиять на общую точность, предотвращая "
496+ "накопление ошибок до уровня, когда они влияют на итоговый результат:"
464497
465498#: ../../tutorial/floatingpoint.rst:226
466499msgid ""
@@ -469,6 +502,10 @@ msgid ""
469502">>> sum([0.1] * 10) == 1.0\n"
470503"True"
471504msgstr ""
505+ ">>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 1.0\n"
506+ "False\n"
507+ ">>> sum([0.1] * 10) == 1.0\n"
508+ "True"
472509
473510#: ../../tutorial/floatingpoint.rst:233
474511msgid ""
@@ -478,6 +515,11 @@ msgid ""
478515"uncommon cases where large magnitude inputs mostly cancel each other out "
479516"leaving a final sum near zero:"
480517msgstr ""
518+ "Функция :func:`math.fsum` идёт дальше и отслеживает все «потерянные цифры» "
519+ "при добавлении значений к сумме, так что результат подвергается только "
520+ "одному округлению. Это медленнее, чем :func:`sum`, но даёт большую точность "
521+ "в редких случаях, когда слагаемые большой величины в основном взаимно "
522+ "компенсируют друг друга, оставляя итоговую сумму близкой к нулю:"
481523
482524#: ../../tutorial/floatingpoint.rst:239
483525msgid ""
@@ -496,17 +538,34 @@ msgid ""
496538">>> total # Straight addition has no correct digits!\n"
497539"-0.0051575902860057365"
498540msgstr ""
541+ ">>> arr = [-0.10430216751806065, -266310978.67179024, 143401161448607.16,\n"
542+ "... -143401161400469.7, 266262841.31058735, -0.003244936839808227]\n"
543+ ">>> float(sum(map(Fraction, arr))) # Точное суммирование с одним округлением\n"
544+ "8.042173697819788e-13\n"
545+ ">>> math.fsum(arr) # Одно округление\n"
546+ "8.042173697819788e-13\n"
547+ ">>> sum(arr) # Многократное округление с расширенной точностью\n"
548+ "8.042178034628478e-13\n"
549+ ">>> total = 0.0\n"
550+ ">>> for x in arr:\n"
551+ "... total += x # Многократное округление со стандартной точностью\n"
552+ "...\n"
553+ ">>> total # Прямое сложение не даёт корректный результат!\n"
554+ "-0.0051575902860057365"
499555
500556#: ../../tutorial/floatingpoint.rst:260
501557msgid "Representation Error"
502- msgstr ""
558+ msgstr "Ошибка представления "
503559
504560#: ../../tutorial/floatingpoint.rst:262
505561msgid ""
506562"This section explains the \" 0.1\" example in detail, and shows how you can "
507563"perform an exact analysis of cases like this yourself. Basic familiarity "
508564"with binary floating-point representation is assumed."
509565msgstr ""
566+ "В этом разделе подробно объясняется пример «0.1» и показывается, как можно "
567+ "самостоятельно выполнить точный анализ подобных случаев. Предполагается "
568+ "базовое знакомство с двоичным представлением чисел с плавающей точкой."
510569
511570#: ../../tutorial/floatingpoint.rst:266
512571msgid ""
@@ -516,6 +575,11 @@ msgid ""
516575"Fortran, and many others) often won't display the exact decimal number you "
517576"expect."
518577msgstr ""
578+ ":dfn:`Ошибка представления` относится к тому факту, что некоторые (на самом "
579+ "деле большинство) десятичные дроби не могут быть представлены точно как "
580+ "двоичные дроби (по основанию 2). Это основная причина, по которой Python "
581+ "(или Perl, C, C++, Java, Fortran и многие другие) часто не отображает точное"
582+ " десятичное число, которое вы ожидаете."
519583
520584#: ../../tutorial/floatingpoint.rst:271
521585msgid ""
@@ -527,81 +591,105 @@ msgid ""
527591"fraction it can of the form *J*/2**\\ *N* where *J* is an integer containing"
528592" exactly 53 bits. Rewriting ::"
529593msgstr ""
594+ "Почему так происходит? Число 1/10 нельзя точно представить как двоичную "
595+ "дробь. По крайней мере, с 2000 года почти все машины используют двоичную "
596+ "арифметику с плавающей точкой стандарта IEEE 754, и почти все платформы "
597+ "сопоставляют числа float в Python со значениями IEEE 754 binary64 «двойной "
598+ "точности». Эти значения имеют точность 53 бита, поэтому при вводе компьютер "
599+ "стремится преобразовать 0.1 в ближайшую дробь вида *J*/2**\\ *N*, где *J* — "
600+ "целое число, содержащее ровно 53 бита. Переписав ::"
530601
531602#: ../../tutorial/floatingpoint.rst:280
532603msgid "1 / 10 ~= J / (2**N)"
533- msgstr ""
604+ msgstr "1 / 10 ~= J / (2**N) "
534605
535606#: ../../tutorial/floatingpoint.rst:282
536607msgid "as ::"
537- msgstr ""
608+ msgstr "как :: "
538609
539610#: ../../tutorial/floatingpoint.rst:284
540611msgid "J ~= 2**N / 10"
541- msgstr ""
612+ msgstr "J ~= 2**N / 10 "
542613
543614#: ../../tutorial/floatingpoint.rst:286
544615msgid ""
545616"and recalling that *J* has exactly 53 bits (is ``>= 2**52`` but ``< "
546617"2**53``), the best value for *N* is 56:"
547618msgstr ""
619+ "и учитывая, что *J* имеет ровно 53 бита (оно ``>= 2**52``, но ``< 2**53``), "
620+ "лучшее значение для *N* — это 56:"
548621
549622#: ../../tutorial/floatingpoint.rst:289
550623msgid ""
551624">>> 2**52 <= 2**56 // 10 < 2**53\n"
552625"True"
553626msgstr ""
627+ ">>> 2**52 <= 2**56 // 10 < 2**53\n"
628+ "True"
554629
555630#: ../../tutorial/floatingpoint.rst:294
556631msgid ""
557632"That is, 56 is the only value for *N* that leaves *J* with exactly 53 bits."
558633" The best possible value for *J* is then that quotient rounded:"
559634msgstr ""
635+ "То есть 56 — единственное значение для *N*, при котором в *J* остаётся ровно"
636+ " 53 бита. Наилучшее возможное значение для *J* — это округленное частное:"
560637
561638#: ../../tutorial/floatingpoint.rst:297
562639msgid ""
563640">>> q, r = divmod(2**56, 10)\n"
564641">>> r\n"
565642"6"
566643msgstr ""
644+ ">>> q, r = divmod(2**56, 10)\n"
645+ ">>> r\n"
646+ "6"
567647
568648#: ../../tutorial/floatingpoint.rst:303
569649msgid ""
570650"Since the remainder is more than half of 10, the best approximation is "
571651"obtained by rounding up:"
572652msgstr ""
653+ "Поскольку остаток больше половины от 10, наилучшее приближение получается "
654+ "округлением в большую сторону:"
573655
574656#: ../../tutorial/floatingpoint.rst:306
575657msgid ""
576658">>> q+1\n"
577659"7205759403792794"
578660msgstr ""
661+ ">>> q+1\n"
662+ "7205759403792794"
579663
580664#: ../../tutorial/floatingpoint.rst:313
581665msgid ""
582666"Therefore the best possible approximation to 1/10 in IEEE 754 double "
583667"precision is::"
584- msgstr ""
668+ msgstr "Поэтому наилучшее приближение к 1/10 в двойной точности IEEE 754: "
585669
586670#: ../../tutorial/floatingpoint.rst:316
587671msgid "7205759403792794 / 2 ** 56"
588- msgstr ""
672+ msgstr "7205759403792794 / 2 ** 56 "
589673
590674#: ../../tutorial/floatingpoint.rst:318
591675msgid ""
592676"Dividing both the numerator and denominator by two reduces the fraction to::"
593- msgstr ""
677+ msgstr "Деление числителя и знаменателя на два уменьшает дробь до: "
594678
595679#: ../../tutorial/floatingpoint.rst:320
596680msgid "3602879701896397 / 2 ** 55"
597- msgstr ""
681+ msgstr "3602879701896397 / 2 ** 55 "
598682
599683#: ../../tutorial/floatingpoint.rst:322
600684msgid ""
601685"Note that since we rounded up, this is actually a little bit larger than "
602686"1/10; if we had not rounded up, the quotient would have been a little bit "
603687"smaller than 1/10. But in no case can it be *exactly* 1/10!"
604688msgstr ""
689+ "Обратите внимание: поскольку мы округлили в большую сторону, на самом деле "
690+ "это немного больше, чем 1/10; если бы мы не округляли в большую сторону, "
691+ "частное было бы немного меньше 1/10. Но ни в коем случае оно не может быть "
692+ "*ровно* 1/10!"
605693
606694#: ../../tutorial/floatingpoint.rst:326
607695msgid ""
@@ -614,6 +702,8 @@ msgid ""
614702">>> 0.1 * 2 ** 55\n"
615703"3602879701896397.0"
616704msgstr ""
705+ ">>> 0.1 * 2 ** 55\n"
706+ "3602879701896397.0"
617707
618708#: ../../tutorial/floatingpoint.rst:334
619709msgid ""
0 commit comments