{"id":485709,"date":"2026-06-30T17:07:40","date_gmt":"2026-06-30T17:07:40","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=485709"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=485709","title":{"rendered":"\u0412 Java \u043d\u0435\u0442 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u0434\u0435\u043d\u0435\u0433"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043c\u0438\u0440\u0435 Java \u043d\u0435 \u0443\u0442\u0438\u0445\u0430\u0435\u0442 \u0438\u0437\u0432\u0435\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0440: <em>\u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <\/em><code><em>BigDecimal<\/em><\/code><em> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u043d\u0435\u0433?<\/em><\/p>\n<p>\u041a\u0440\u0430\u0442\u043a\u043e \u2014 <strong>\u043d\u0435\u0442<\/strong>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 <em>\u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/em><\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0447\u0430\u0449\u0435 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0434\u043e\u0433\u043c\u044b, \u0430 \u043d\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f. \u0423\u043c\u0435\u0441\u0442\u043d\u044b \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 \u00ab<code>double<\/code> \u0441\u043b\u043e\u043c\u0430\u043d\u00bb, \u00ab<code>BigDecimal<\/code> \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439\u00bb, \u00ab\u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443\u00bb \u0438\u043b\u0438 \u00ab\u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 IEEE 754\u00bb \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0435\u043f\u043e\u0434\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.<\/p>\n<p>\u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 IEEE 754, \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 BigDecimal \u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0430\u044e\u0442 \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430 \u0432\u0430\u0441, \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c production \u043b\u043e\u0432\u0443\u0448\u043a\u0430\u043c\u0438 (\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c), \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c\u0438 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440. \u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434.<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/h3>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0442 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u0430\u043a\u0442\u0443: Java-\u0442\u0438\u043f\u044b <code>float<\/code> \u0438 <code>double<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e. \u041f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u2014 \u043e\u0441\u043d\u043e\u0432\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<h4>IEEE 754<\/h4>\n<p>float \u0438 double \u0432 Java \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE 754: float \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>binary32<\/code>, <code>double<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 binary64. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0437\u0434\u0435\u0441\u044c \u2014 <em>\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439<\/em>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u044b \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 2. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0447\u0438\u0441\u043b\u0430, \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"java\">public class FloatingPointProblem {\u00a0\u00a0\u00a0\u00a0public static void main(String[] args) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double x = 0.1 + 0.2;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(x);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ 0.30000000000000004\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(x == 0.3); \u00a0 \/\/ false \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)\u00a0\u00a0\u00a0\u00a0}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>0.1 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435; \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>binary64<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439 \u0438\u0437-\u0437\u0430 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e <strong>\u043d\u0435<\/strong> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e double \u0441\u043b\u043e\u043c\u0430\u043d. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b 0.1 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0442\u043e\u0447\u043d\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u2014 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a 1\/3 \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 0.1 \u0432 Java, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>binary64<\/code>: <code>0.1000000000000000055511151231257827021181583404541015625<\/code>. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0443\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>double \u0431\u044b\u0441\u0442\u0440, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0435\u043d \u0438 \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u043e \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043e\u043d \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u043e\u0447\u0435\u043d. \u042d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043f\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0443, \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d.<\/p>\n<h4>\u041d\u0430\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e<\/h4>\n<p>\u0421\u0430\u043c\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u2014 \u043d\u0435 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 <code>==<\/code>.<\/p>\n<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"java\">if (result == expected) { ... }\u00a0 \/\/ dangerous with floating-point<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0439\u0442\u0435 \u0441 \u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 epsilon):<\/p>\n<pre><code class=\"java\">boolean nearlyEqual(double a, double b, double epsilon) {  return Math.abs(a - b) &lt;= epsilon;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f (\u0441\u043a\u0430\u0436\u0435\u043c, \u043e\u0442 <code>0.0001<\/code> \u0434\u043e <code>1_000_000<\/code>), \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 epsilon \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u044f\u0433\u043a\u0438\u0439 \u0434\u043b\u044f \u043c\u0430\u043b\u044b\u0445. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a:<\/p>\n<pre><code class=\"java\">boolean nearlyEqualRelative(double a, double b, double relTol) {\u00a0\u00a0\u00a0\u00a0double diff = Math.abs(a - b);\u00a0\u00a0\u00a0\u00a0double norm = Math.max(Math.abs(a), Math.abs(b));\u00a0\u00a0\u00a0\u00a0return diff &lt;= relTol * norm;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a; \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: <strong>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d <\/strong><code><strong>if<\/strong><\/code><strong>.<\/strong><\/p>\n<h4>strictfp, \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 x87 FPU \u0438 \u0442\u0438\u0445\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Java 17<\/h4>\n<p>Java 1.0 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 IEEE 754, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Intel x87 FPU \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 80-\u0431\u0438\u0442\u043d\u043e\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0412 Java 1.2 \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441:<\/p>\n<ul>\n<li>\n<p><em>\u0440\u0435\u0436\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/em> , \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0432\u0448\u0438\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u0434\u0430\u0432\u0430\u0432\u0448\u0438\u0439 \u0441\u043b\u0435\u0433\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435)<\/p>\n<\/li>\n<li>\n<p><em>\u0441\u0442\u0440\u043e\u0433\u0438\u0439<\/em> \u0440\u0435\u0436\u0438\u043c, \u0442\u043e\u0447\u043d\u044b\u0439 IEEE 754, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>strictfp<\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>strictfp<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043c\u043e\u0433\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0432\u0438\u0434 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043a\u043e\u0448\u043c\u0430\u0440.<\/p>\n<p><a href=\"https:\/\/openjdk.org\/jeps\/306\">JEP 306<\/a> \u0432 <strong>Java 17<\/strong> \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e (SSE2, AVX) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 IEEE 754 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0442\u0435\u0440\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 JEP 306 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b <em>\u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u0433\u0443\u044e<\/em> \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>strictfp<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f no-op: \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0434\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430.<\/p>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434: <strong>\u043d\u0430 Java 17+ \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435 strictfp \u0432 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<h4>\u041c\u0438\u043d\u044b NaN \u0438 -0.0<\/h4>\n<p>IEEE 754 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<p>NaN (Not a Number)* \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c: \u043e\u043d\u043e \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435. \u042d\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \u0438 Java \u0442\u043e\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u043c\u0443:<\/p>\n<pre><code class=\"java\">double nan = Double.NaN;System.out.println(nan == nan);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ false\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(Double.compare(nan, nan)); \/\/ 0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)System.out.println(Double.isNaN(nan));\u00a0 \u00a0 \u00a0 \u00a0 \/\/ true<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>==<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>NaN != NaN<\/code>, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 IEEE 754<\/p>\n<\/li>\n<li>\n<p><code>Double.compare()<\/code> \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>NaN<\/code> \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>==<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>NaN != NaN<\/code>, \u043e\u0434\u043d\u0430\u043a\u043e <code>Double.compare()<\/code> \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NaN \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0430 <code>Double.valueOf(NaN).equals(Double.valueOf(NaN))<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>true<\/code> \u0440\u0430\u0434\u0438 <code>HashMap<\/code> \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 <code>double<\/code> \u043a\u0430\u043a \u043a\u043b\u044e\u0447\u0438 \u0432 \u043b\u043e\u0433\u0438\u043a\u0435 \u0438\u043b\u0438 \u0432 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0432\u0435\u0442\u0432\u044f\u0445, \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Double.isNaN()<\/code>.<\/p>\n<p>-0.0 (\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c)* \u2014 \u0434\u0440\u0443\u0433\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430:<\/p>\n<pre><code class=\"java\">System.out.println(0.0 == -0.0);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ true\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(Double.compare(0.0, -0.0)); \/\/ 1 (0.0 &gt; -0.0) (2)System.out.println(1.0 \/ 0.0);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ InfinitySystem.out.println(1.0 \/ -0.0); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ -Infinity \u00a0 \u00a0 \u00a0 (3)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>3<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ol>\n<li>\n<p>\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 <code>0.0 == -0.0<\/code><\/p>\n<\/li>\n<li>\n<p><code>Double.compare<\/code> \u0438 <code>Double.valueOf().equals()<\/code> \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u044c \u0438\u0445<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 <code>-0.0<\/code> \u0434\u0430\u0451\u0442 <code>-Infinity<\/code>, \u0430 \u043d\u0435 <code>+Infinity<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: <strong>\u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 <\/strong><code><strong>double<\/strong><\/code><strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c <\/strong><code><strong>NaN<\/strong><\/code><strong> \u0438\u043b\u0438 <\/strong><code><strong>-0.0<\/strong><\/code><strong>, \u044f\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f\u0445 \u0438\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439.<\/strong><\/p>\n<h3>\u041a\u043e\u0433\u0434\u0430 double \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440<\/h3>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0442\u044f\u043d\u0443\u0442\u0441\u044f \u043a <code>BigDecimal<\/code> \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b. <code>double<\/code> \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440, \u043a\u043e\u0433\u0434\u0430:<\/p>\n<h2>\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430<\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430, \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ULP \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. ( <em>ULP<\/em> (Unit in the Last Place) \u2014 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 double \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b. \u042d\u0442\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439.)<\/p>\n<h2>\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u0430<\/h2>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b GPS, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0448\u0443\u043c. \u0414\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442.<\/p>\n<h2>\u0412\u0430\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>double \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e FPU. \u042d\u0442\u043e \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c <code>BigDecimal<\/code>.<\/p>\n<h2>\u041e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445<\/h2>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0434\u0443\u0442\u0441\u044f \u0432 <code>double<\/code> \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e:<\/p>\n<pre><code class=\"java\">double average(double[] values) {\u00a0\u00a0\u00a0\u00a0double sum = 0.0;    for (double v : values) sum += v;    return sum \/ values.length;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 \u0438\u043b\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432? \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ULP, \u0438 \u044d\u0442\u0438 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u0445 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u2014 \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e double \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <em>\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e<\/em>. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 double \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u0431\u043e\u0440 \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 double \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u044e\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h3>\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/h3>\n<p>\u0412\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 double, \u0431\u0435\u0437 BigDecimal . \u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h4>\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0430\u0445\u0430\u043d\u0430<\/h4>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u0440\u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f. \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0430\u0445\u0430\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>\u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438<\/em> , \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0451 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"java\">double kahanSum(double[] values) {\u00a0\u00a0\u00a0\u00a0double sum = 0.0;\u00a0\u00a0\u00a0\u00a0double compensation = 0.0; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0for (double value : values) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double y = value - compensation;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double t = sum + y;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0compensation = (t - sum) - y;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum = t;\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0return sum;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u043c<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u2014 \u0441\u0443\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/p>\n<\/li>\n<\/ol>\n<p>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 <em>n<\/em>, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0443 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 O(<em>n<\/em>). \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043c\u0435\u0442\u043e\u0434\u0430 \u041a\u0430\u0445\u0430\u043d\u0430 \u0435\u0441\u0442\u044c \u0441\u043b\u0430\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0443\u043c\u043c\u0443, \u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438 \u0434\u0430\u0451\u0442 \u0441\u0431\u043e\u0439. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a.<\/p>\n<h4>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041a\u0430\u0445\u0430\u043d\u0430\u2013\u0411\u0430\u0431\u0443\u0448\u043a\u0438 \u043f\u043e \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440\u0443<\/h4>\n<p>\u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440 (1974) \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u044b: \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"java\">double neumaierSum(double[] values) {\u00a0\u00a0\u00a0\u00a0double sum = 0.0;\u00a0\u00a0\u00a0\u00a0double compensation = 0.0;\u00a0\u00a0\u00a0\u00a0for (double value : values) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double t = sum + value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (Math.abs(sum) &gt;= Math.abs(value)) {\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0compensation += (sum - t) + value;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} else {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0compensation += (value - t) + sum; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum = t;\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0return sum + compensation; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (3)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p>\u0421\u0443\u043c\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u0435: \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435: \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u0441\u0443\u043c\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043a\u043e\u043d\u0446\u0435<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430: \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>[1.0, 1e100, 1.0, -1e100]<\/code>, \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0430\u0445\u0430\u043d\u0430 \u0434\u0430\u0451\u0442 0.0, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 2.0. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430: \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043f\u043e\u0440\u0442\u0444\u0435\u043b\u0438, \u0433\u0434\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u043a\u043e\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430\u043c\u0438, \u0438\u043b\u0438 \u043d\u0430\u0443\u0447\u043d\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b.<\/p>\n<h2>\u041f\u043e\u043f\u0430\u0440\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u041f\u043e\u043f\u0430\u0440\u043d\u043e\u0435, \u0438\u043b\u0438 \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u0435, \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434: \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043f\u043e\u043f\u043e\u043b\u0430\u043c, \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0437\u0430\u0442\u0435\u043c \u0434\u0432\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0442\u0451\u0442 \u043a\u0430\u043a O(log <em>n<\/em>) \u2014 \u0445\u0443\u0436\u0435, \u0447\u0435\u043c O(1) \u0443 \u041a\u0430\u0445\u0430\u043d\u0430, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u043e, \u0438 \u0441 \u0432\u0430\u0436\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c: \u0447\u0438\u0441\u043b\u043e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435, \u043a\u0430\u043a \u0443 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u00ab\u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0439 \u0438 \u0432\u043b\u0430\u0441\u0442\u0432\u0443\u0439\u00bb \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, 16\u201332 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0430\u0438\u0432\u043d\u043e) \u0434\u043b\u044f \u0430\u043c\u043e\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438. \u041f\u043e\u043f\u0430\u0440\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 NumPy \u0438 Julia \u0434\u043b\u044f \u0438\u0445 sum \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 FFT.<\/p>\n<h2>\u0421\u043b\u0438\u0442\u043d\u043e\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435-\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (FMA)<\/h2>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Java 9, <code>Math.fma(a, b, c)<\/code> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 <code>a<em>*b+c<\/em><\/code><em> \u0441 \u043e\u0434\u043d\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <\/em><code><em>fusedMultiplyAdd<\/em><\/code><em> \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430 IEEE 754-2008. \u041f\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u043c <\/em><code><em>a*<\/em>b+c<\/code> \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u0435\u0449\u0451 \u0440\u0430\u0437, \u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. FMA \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435 \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 c.<\/p>\n<pre><code class=\"java\">double standard = a * b + c;\u00a0 \u00a0 \/\/ two rounding stepsdouble fma = Math.fma(a, b, c); \/\/ one rounding step, more accurate<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>FMA \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0446\u0435\u043d\u0435\u043d \u0434\u043b\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u043b\u0435\u043d\u043e\u0432 (\u043c\u0435\u0442\u043e\u0434 \u0413\u043e\u0440\u043d\u0435\u0440\u0430) \u0438 \u043b\u044e\u0431\u044b\u0445 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439, \u0433\u0434\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u041d\u0430 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u0443\u0440\u0435 \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 FMA (\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 CPU x86 \u0438 ARM) \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0435\u0442, \u0430 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<p><strong>C\u0430\u043c JDK.<\/strong> \u0412 Javadoc \u0434\u043b\u044f <code>DoubleStream.sum()<\/code> \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u00ab\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438\u00bb. \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, <code>Collectors.summingDouble()<\/code> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438 (\u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0443\u043c\u043c\u044b \u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438).<\/p>\n<p><strong>Apache Commons Numbers.<\/strong> \u041a\u043b\u0430\u0441\u0441 <code>Sum<\/code> \u0438\u0437 commons-numbers-core \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b <em>Sum2S<\/em> \u0438 <em>Dot2S<\/em> (Ogita, Rump, Oishi, <em>SIAM J. Sci. Comput<\/em>, 2005) \u2014 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u0443\u044e \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Java. \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Precision \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043a production \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u043e epsilon \u0438 ULP (\u0441\u043c. <a href=\"https:\/\/blog.frankel.ch\/bigdecimal-vs-double\/#_apache_commons_numbers\">Apache Commons Numbers<\/a>).<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\"><strong>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\"><strong>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c vs \u043d\u0430\u0438\u0432\u043d\u044b\u0439<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\"><strong>\u0420\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0438\u0432\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(<em>n<\/em>)<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">1x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u0414\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0441\u0442\u0440\u043e \u0438 \u0433\u0440\u0443\u0431\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043e\u043f\u0430\u0440\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(log <em>n<\/em>)<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">~1x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u0414\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 (NumPy, Julia)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u044d\u0445\u044d\u043d\u0430<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(1)<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">~4x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u041d\u0435\u0442 (\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440\u0430<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(1)<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">~4x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u0447\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/Kahan_summation_algorithm#Precision\">\u041c\u0435\u0442\u043e\u0434 \u041a\u043b\u044f\u0439\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430<\/a><\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(1), \u0435\u0449\u0451 \u0442\u043e\u0447\u043d\u0435\u0435<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">~6x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Apache Commons Sum (Sum2S)<\/p>\n<\/td>\n<td data-colwidth=\"146\" width=\"146\">\n<p align=\"left\">O(1)<\/p>\n<\/td>\n<td data-colwidth=\"126\" width=\"126\">\n<p align=\"left\">~4x<\/p>\n<\/td>\n<td data-colwidth=\"119\" width=\"119\">\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043a\u043e\u0434 \u043d\u0430 Java<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0422\u043e, \u0447\u0442\u043e BigDecimal \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0448\u0430\u0435\u0442<\/h3>\n<p><code>BigDecimal<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435. \u042d\u0442\u043e <strong>\u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f<\/strong>, <strong>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u0430\u044f<\/strong>, <strong>\u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u0430\u044f <\/strong>\u0438 <strong>\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u0430\u044f <\/strong>\u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 <code>BigDecimal<\/code> \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0435\u0437 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"unscaled value = 1999, scale = 2\u00a0 \u2192\u00a0 19.99\" alt=\"unscaled value = 1999, scale = 2\u00a0 \u2192\u00a0 19.99\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98036bc3b2efade55f9558aa659fa4.svg\" width=\"320\" height=\"16\" data-width=\"40.446\" data-height=\"2.009\" data-vertical-align=\"-0.439\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98036bc3b2efade55f9558aa659fa4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ca\/ca9\/ca98036bc3b2efade55f9558aa659fa4.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e 19.99 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0442\u043e\u0447\u043d\u043e \u043a\u0430\u043a 19.99, \u0430 \u043d\u0435 \u043a\u0430\u043a \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435. \u041a\u0430\u0436\u0434\u0430\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443, \u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0432\u044b \u0437\u0430\u0434\u0430\u0451\u0442\u0435 \u044f\u0432\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435.<\/p>\n<h2>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 BigDecimal \u0438\u0437 double<\/h2>\n<p>\u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 <code>BigDecimal<\/code> \u043e\u0448\u0438\u0431\u043e\u043a:<\/p>\n<pre><code class=\"java\">new BigDecimal(0.1);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435; \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 0.100000000000000005551\u2026\u200b, \u0430 \u043d\u0435 0.1.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 <code>0.1000000000000000055511151231257827021181583404541015625<\/code>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0442\u043e\u0447\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>binary64<\/code> \u0434\u043b\u044f <code>0.1<\/code>. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u0447\u043d\u0430\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 String \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>valueOf<\/code>:<\/p>\n<pre><code class=\"java\">new BigDecimal(\"0.1\"); \u00a0 \u00a0 \/\/ exact: 0.1BigDecimal.valueOf(0.1); \u00a0 \/\/ also correct: uses Double.toString internally<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0430\u043c, \u0433\u0434\u0435 <code>BigDecimal<\/code> \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u2014 \u044d\u0442\u043e \u044f\u0432\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c. \u0412 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043d\u0430\u043b\u043e\u0433\u043e\u043e\u0431\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0441\u043a\u043e\u0433\u043e \u0443\u0447\u0451\u0442\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u2014 \u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f, \u0430 \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u041d\u0414\u0421:<\/p>\n<pre><code class=\"java\">BigDecimal vat = amount.multiply(rate).setScale(2, RoundingMode.HALF_UP);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u044f (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0434\u0430\u0451\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e \u0434\u0440\u043e\u0431\u044c):<\/p>\n<pre><code class=\"java\">BigDecimal result = a.divide(b, 2, RoundingMode.HALF_UP);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438 \u0440\u0435\u0436\u0438\u043c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, divide \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 <code>ArithmeticException<\/code> \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0434\u0440\u043e\u0431\u044c\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1\/3).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0438 \u0440\u0435\u0436\u0438\u043c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, divide \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 <code>ArithmeticException<\/code> \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0434\u0440\u043e\u0431\u044c\u044e. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e: <code>BigDecimal<\/code> \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0412\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438 \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c.<\/p>\n<h2>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u044d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f <code>BigDecimal<\/code> \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d-\u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"java\">BigDecimal amount = new BigDecimal(\"19.995\");amount.setScale(2, RoundingMode.HALF_UP);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(amount); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ still 19.995<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0428\u0418\u0411\u041a\u0410: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f; <code>BigDecimal<\/code> \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u0435\u043d, \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <strong>\u043d\u043e\u0432\u044b\u0439<\/strong> \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440<\/p>\n<p><code>BigDecimal<\/code> \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u0435\u043d. \u041a\u0430\u0436\u0434\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 (<code>setScale<\/code>, <code>add<\/code>, <code>multiply<\/code>, <code>divide<\/code>) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <strong>\u043d\u043e\u0432\u044b\u0439<\/strong> \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a <code>SonarQube<\/code>, \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442 \u044d\u0442\u043e (\u043f\u0440\u0430\u0432\u0438\u043b\u043e S2201), \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0441 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u044c \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"java\">amount = amount.setScale(2, RoundingMode.HALF_UP);.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u041b\u043e\u0432\u0443\u0448\u043a\u0430 equals() vs compareTo()<\/h2>\n<p>\u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u043d\u0442\u0435\u0440\u043f\u0440\u0430\u0439\u0437-\u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"java\">BigDecimal a = new BigDecimal(\"2.0\");BigDecimal b = new BigDecimal(\"2.00\");System.out.println(a.equals(b));\u00a0 \u00a0 \u00a0 \/\/ false \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(a.compareTo(b)); \u00a0 \/\/ 0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<ol>\n<li>\n<p><code>equals()<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>\u0438<\/strong> \u043c\u0430\u0441\u0448\u0442\u0430\u0431: 2.0 (scale 1) \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 2.00 (scale 2)<\/p>\n<\/li>\n<li>\n<p><code>compareTo()<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430<\/p>\n<\/li>\n<\/ol>\n<p><code>equals()<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>\u0438<\/strong> \u043c\u0430\u0441\u0448\u0442\u0430\u0431. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 2.0 \u0438\u043c\u0435\u0435\u0442 scale 1, \u0430 2.00 \u0438\u043c\u0435\u0435\u0442 scale 2, \u043e\u043d\u0438 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <code>equals()<\/code>. \u042d\u0442\u043e \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0451: <code>HashMap<\/code> \u043a\u043b\u044e\u0447\u0438, <code>Set<\/code> \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435: <strong>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <\/strong><code><strong>compareTo() == 0<\/strong><\/code><strong> \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <\/strong><code><strong>BigDecimal<\/strong><\/code><strong> .<\/strong> \u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>BigDecimal<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <code>Map<\/code> \u043a\u043b\u044e\u0447\u0430, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>stripTrailingZeros()<\/code>, \u043e\u0434\u043d\u0430\u043a\u043e \u0443\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Java (\u0434\u043e JDK 8u) <code>stripTrailingZeros()<\/code> \u0434\u043b\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u0451\u043b \u0441\u0435\u0431\u044f \u043d\u0435\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<h2>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p><code>BigDecimal<\/code> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043a\u0443\u0447\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435. \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 double, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e FPU, \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043e\u0433\u0440\u043e\u043c\u043d\u044b. \u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u041f\u0438\u0442\u0435\u0440\u0430 \u041b\u043e\u0440\u0438 (Vanilla Java \/ Chronicle Software) \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 100 \u0440\u0430\u0437 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u044f \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0446\u0438\u043a\u043b\u043e\u0432.<\/p>\n<p><strong>\u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e <\/strong><code><strong>BigDecimal<\/strong><\/code><strong> \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440.<\/strong> \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c, \u0438 \u044d\u0442\u0430 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0435 \u0441\u0447\u0435\u0442\u0430 \u043f\u0440\u0438 100 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u0445 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, <code>BigDecimal<\/code> \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u044f\u0432\u043e\u043a, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0446\u0435\u043d \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u2014 \u043d\u0435\u0442.<\/p>\n<p>\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>System.nanoTime()<\/code> \u0446\u0438\u043a\u043b\u044b; \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 JIT, \u043f\u0430\u0443\u0437\u044b GC \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u043b\u0430\u044e\u0442 \u0438\u0445 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 JMH:<\/p>\n<pre><code class=\"java\">@Benchmarkpublic void doubleCalc(Blackhole bh) {\u00a0\u00a0\u00a0\u00a0double result = (100.10 + 200.20) \/ 2.0;\u00a0\u00a0\u00a0\u00a0bh.consume(result);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)}@Benchmarkpublic void bigDecimalCalc(Blackhole bh) {\u00a0\u00a0\u00a0\u00a0BigDecimal a = new BigDecimal(\"100.10\");\u00a0\u00a0\u00a0\u00a0BigDecimal b = new BigDecimal(\"200.20\");\u00a0\u00a0\u00a0\u00a0BigDecimal result = a.add(b).divide(BigDecimal.valueOf(2), 2, RoundingMode.HALF_UP);\u00a0\u00a0\u00a0\u00a0bh.consume(result);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Blackhole.consume()<\/code> \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0451\u0440\u0442\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 JIT; \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0432\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0435 \u043d\u0438\u0447\u0435\u0433\u043e<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0411\u044b\u0441\u0442\u0440\u043e\u0435 double \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p>\u0412 \u0431\u043b\u043e\u0433\u0435 \u041f\u0438\u0442\u0435\u0440\u0430 \u041b\u043e\u0440\u0438 (Vanilla Java \/ Chronicle Software) \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 double \u0434\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0441 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u0445\u043d\u0438\u043a\u0438. \u0415\u0433\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0442\u0440\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0434\u0432\u0443\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432: \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 (~6 \u043d\u0441), <code>Math.round()<\/code> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 (~17 \u043d\u0441) \u0438 <code>BigDecimal.setScale()<\/code> (~932 \u043d\u0441).<\/p>\n<p>\u041f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u2014 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u0412\u043e\u0442 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0435\u0433\u043e \u0431\u043b\u043e\u0433\u0430 \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432:<\/p>\n<pre><code class=\"java\">static double roundToTwoPlaces(double d) {\u00a0\u00a0\u00a0\u00a0return ((long) (d &lt; 0 ? d  100 - 0.5 : d  100 + 0.5)) \/ 100.0;\u00a0 (1)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 +\/-0.5 \u0434\u043b\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e, \u0443\u0441\u0435\u043a\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e; \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0437\u043d\u0430\u043a\u0443<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"java\">static double roundHalfUp(double value, int decimalPlaces) {\u00a0\u00a0\u00a0\u00a0double factor = Math.pow(10, decimalPlaces);\u00a0\u00a0\u00a0\u00a0return value &gt;= 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0? Math.floor(value * factor + 0.5) \/ factor\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0: Math.ceil(value * factor - 0.5) \/ factor;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043a\u0430\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430 <code>double<\/code> (\u0434\u043e 2^53). \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f <code>HALF_UP<\/code> ; \u0434\u043b\u044f \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, <em>\u0442.\u0435.<\/em>, <code>HALF_EVEN<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>Math.rint()<\/code> \u0438\u043b\u0438 <code>BigDecimal<\/code> \u0441 <code>RoundingMode.HALF_EVEN<\/code>. \u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0441\u0442\u0438, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u043c, <code>BigDecimal<\/code> \u0441 \u044f\u0432\u043d\u044b\u043c <code>RoundingMode<\/code> \u043f\u0440\u043e\u0449\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u043e\u043c.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u043e\u0434\u0445\u043e\u0434<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c (\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u041b\u043e\u0440\u0438)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0420\u0435\u0436\u0438\u043c\u044b \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0422\u0440\u044e\u043a \u0441 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \/ <code>Math.floor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">~6 \u043d\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u043b\u044c\u043a\u043e <code>HALF_UP<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0440\u044f\u0447\u0438\u0435 \u043f\u0443\u0442\u0438, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Math.round(value * factor) \/ factor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">~17 \u043d\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>HALF_UP<\/code> (Java 7+)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>BigDecimal.valueOf(v).setScale(n, mode)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">~932 \u043d\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0441\u0435 \u0440\u0435\u0436\u0438\u043c\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0443\u0434\u0438\u0442, \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>decimal4jDoubleRounder.round(v, n)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0441\u0442\u0440\u044b\u0439 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0442\u043e\u0432 \u043a \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0443, \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>BigDecimal.valueOf(value)<\/code> , \u0430 \u043d\u0435 <code>new BigDecimal(value)<\/code> \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>BigDecimal<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u044e\u043a\u0438 \u0441 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435, \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c\u0438, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430. \u041c\u043d\u043e\u0433\u0438\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>BigDecimal<\/code> \u0432\u043e\u0432\u0441\u0435. \u041e\u043d\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 <strong>\u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 long<\/strong>.<\/p>\n<p>\u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430 \u0434\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c 19.99 \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438\u043b\u0438 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0445\u0440\u0430\u043d\u0438\u0442\u0435 1999 \u043a\u0430\u043a \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0446\u0435\u043d\u0442\u044b. \u0412\u0441\u044f \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0434 \u0446\u0435\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u2014 \u0431\u044b\u0441\u0442\u0440\u044b\u043c\u0438, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<pre><code class=\"java\">public record Money(long cents) {\u00a0\u00a0\u00a0\u00a0public Money plus(Money other) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new Money(Math.addExact(cents, other.cents));\u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0public Money multiply(long multiplier) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new Money(Math.multiplyExact(cents, multiplier));\u00a0 (1)\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0public BigDecimal toBigDecimal() {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return BigDecimal.valueOf(cents, 2);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2\u00a0\u00a0\u00a0\u00a0}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"62\" width=\"62\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Math.addExact<\/code> \u0438 <code>Math.multiplyExact<\/code> \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442 <code>ArithmeticException<\/code> \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u2014 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"62\" width=\"62\">\n<p align=\"left\"><strong>2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <code>BigDecimal<\/code> \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0438 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0435\u0441\u043e\u043c\u044b: \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u0443\u0447\u0435, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 GC, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u0430\u044f \u0441 \u0441\u044b\u0440\u044b\u043c double. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0441\u0442\u043e\u043b\u044c \u0436\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c, \u044f\u0432\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0442\u0430\u0432\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u041d\u0414\u0421, \u0432 \u0441\u0445\u0435\u043c\u0435 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <em>\u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b<\/em> (\u0441\u043e\u0442\u044b\u0435 \u0434\u043e\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c 22% = 2200 \u0431\u0430\u0437\u0438\u0441\u043d\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432):<\/p>\n<pre><code class=\"java\">static long applyVat(long netCents, long vatBasisPoints) {\u00a0\u00a0\u00a0\u00a0long numerator = Math.multiplyExact(netCents, 10_000 + vatBasisPoints);\u00a0\u00a0\u00a0\u00a0return (numerator + 5_000) \/ 10_000; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"58\" width=\"58\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u0441 \u041d\u0414\u0421 (\u043d\u0435\u0442\u0442\u043e + \u041d\u0414\u0421); <code>+ 5_000<\/code> \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430 <code>10_000<\/code> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u00ab\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0432\u0432\u0435\u0440\u0445\u00bb \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u0439 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0435, \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043d\u0438\u0437\u043a\u043e\u043b\u0430\u0442\u0435\u043d\u0442\u043d\u044b\u0445 \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0438 \u043f\u043b\u0430\u0442\u0451\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445.<\/p>\n<h3>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445<\/h3>\n<p>\u042d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Java \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0440\u0435\u043b\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u043d\u0438\u0448\u0443. \u041d\u0438\u0436\u0435 \u2014 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443.<\/p>\n<h4>JavaMoney \u0438 Moneta<\/h4>\n<p><a href=\"https:\/\/javamoney.github.io\/\">JSR 354<\/a> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 API \u0434\u043b\u044f \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u0438 \u0432\u0430\u043b\u044e\u0442 \u0432 Java \u2014 \u043e\u043d \u0436\u0435 JavaMoney. \u042d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, <strong>Moneta<\/strong>, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0442\u0438\u043f\u0430:<\/p>\n<ul>\n<li>\n<p>Money: \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 <code>BigDecimal<\/code>. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>FastMoney: \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 <code>long<\/code> \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439 \u0432 5 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438. API JSR 354 (MonetaryAmount) \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0434 \u043e\u0431\u043e\u0438\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438. API \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0432\u0430\u043b\u044e\u0442\u0430\u043c\u0438, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0432.<\/p>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/strong> \u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0439 \u0442\u0438\u043f \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0430\u043b\u044e\u0442, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0435\u0439. \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u0451\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u0438 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0436\u0438\u043c\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<h4>Joda-Money<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0421\u0442\u0438\u0432\u0435\u043d\u043e\u043c \u041a\u043e\u043b\u0431\u043e\u0440\u043d\u043e\u043c \u2014 \u0430\u0432\u0442\u043e\u0440\u043e\u043c Joda-Time \u0438 <code>java.time<\/code>, <a href=\"https:\/\/www.joda.org\/joda-money\/\">Joda-Money<\/a> \u2014 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 JSR 354. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 Money, \u043a\u043b\u0430\u0441\u0441 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <code>BigDecimal<\/code>, \u0438 <code>BigMoney<\/code>, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0410\u043d\u0430\u043b\u043e\u0433\u0430 FastMoney \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442; \u0443\u043f\u043e\u0440 \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u044b\u0439, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 API \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0433\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0435\u043d\u044c\u0433\u0430\u043c\u0438 \u2014 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 (\u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0446\u0438\u044f, SaaS-\u0431\u0438\u043b\u043b\u0438\u043d\u0433, \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c).<\/p>\n<pre><code class=\"java\">import org.joda.money.Money;import org.joda.money.CurrencyUnit;Money price = Money.of(CurrencyUnit.EUR, 19.99);Money total = price.multipliedBy(3);Money vat \u00a0 = total.multipliedBy(0.22, RoundingMode.HALF_UP);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/strong> \u0411\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 JSR 354 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0439 \u0442\u0438\u043f, \u043d\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c JSR API (\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u0430\u043b\u044e\u0442\u044b, \u043c\u043e\u043d\u0435\u0442\u0430\u0440\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b). \u0412\u0435\u0442\u043a\u0430 2.x \u0442\u0440\u0435\u0431\u0443\u0435\u0442 Java 21+; \u0432\u0435\u0442\u043a\u0430 1.x \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 Java 8+.<\/p>\n<h4>decimal4j<\/h4>\n<p><a href=\"https:\/\/github.com\/tools4j\/decimal4j\">decimal4j<\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0430 long \u0441 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439 \u0434\u043e 18 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u043c\u0438 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0438 API \u0431\u0435\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0438\u0437\u043a\u043e\u043b\u0430\u0442\u0435\u043d\u0442\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u0430\u043a \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435, \u0442\u0430\u043a \u0438 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b <code>decimal<\/code>; \u0448\u043a\u0430\u043b\u0430 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0442\u0438\u043f\u0435 (<em>\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/em>, Decimal2f \u0434\u043b\u044f 2 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439).<\/p>\n<pre><code class=\"java\">import org.decimal4j.immutable.Decimal2f;Decimal2f price = Decimal2f.valueOf(\"19.99\");Decimal2f total = price.multiply(3);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, <code>MutableDecimal2f<\/code>, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f <code>this<\/code>, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430\u0445, \u0433\u0434\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 GC \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>DoubleRounder<\/code>, \u0443\u0442\u0438\u043b\u0438\u0442\u0443 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>double<\/code> \u0434\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0441\u043c. <a href=\"https:\/\/blog.frankel.ch\/bigdecimal-vs-double\/#_fast_double_rounding\">\u0411\u044b\u0441\u0442\u0440\u043e\u0435 double \u041e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435<\/a>).<\/p>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/strong> \u041d\u0438\u0437\u043a\u043e\u043b\u0430\u0442\u0435\u043d\u0442\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0443\u0436\u043d\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0447\u0438\u0441\u0442\u044b\u0439 API \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u044b\u0440\u043e\u0439 long \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u043e\u0439. \u0422\u043e\u0440\u0433\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0434\u0432\u0438\u0436\u043a\u0438 \u0446\u0435\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b.<\/p>\n<h4>Apache Commons Numbers<\/h4>\n<p><a href=\"https:\/\/commons.apache.org\/proper\/commons-numbers\/\">commons-numbers-core<\/a> \u2014 \u043d\u0435 \u0434\u0435\u043d\u0435\u0436\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430; \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u0415\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435:<\/p>\n<h4>Sum<\/h4>\n<p>\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0445 \u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 Sum2S\/Dot2S, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435. \u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0430\u0438\u0432\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u0430\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h4>Precision<\/h4>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u044b \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439: <code>equals(double, double, double eps)<\/code> \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d, <code>equals(double, double, int maxUlps)<\/code> \u0434\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ULP \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c <code>RoundingMode<\/code>. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <code>EPSILON<\/code> (\u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u044d\u043f\u0441\u0438\u043b\u043e\u043d, 2^-53) \u0438 <code>SAFE_MIN<\/code> (\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 <code>double<\/code>, 2^-1022) \u0432 \u0432\u0438\u0434\u0435 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442.<\/p>\n<pre><code class=\"java\">import org.apache.commons.numbers.core.Precision;boolean eq = Precision.equals(0.1 + 0.2, 0.3, 1); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)boolean eq2 = Precision.equals(a, b, 1e-10);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"57\" width=\"57\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 ULP: \u0440\u0430\u0432\u043d\u044b, \u0435\u0441\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 1 ULP<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"57\" width=\"57\">\n<p align=\"left\"><strong>2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u043f\u0441\u0438\u043b\u043e\u043d<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/strong> \u041b\u044e\u0431\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u043d\u0443\u0436\u0434\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u0432 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438, \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438. \u041d\u0430\u0443\u0447\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, ML-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b, \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<h4>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h4>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 <a href=\"https:\/\/github.com\/ta4j\/ta4j\">ta4j<\/a>, Technical Analysis for Java, \u0447\u0435\u0439 <code>Num<\/code> \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0434 <code>DecimalNum<\/code> (<code>BigDecimal<\/code>) \u0438 <code>DoubleNum<\/code> (<code>double<\/code>), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u2014 \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434, \u0447\u0442\u043e Moneta \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441 Money \u043f\u0440\u043e\u0442\u0438\u0432 FastMoney.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0411\u0435\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0430\u043b\u044e\u0442<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Moneta Money<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>BigDecimal<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430 (JSR 354)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u0435\u043a\u0442\u043e\u0440, \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Moneta FastMoney<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>long<\/code> (5 \u0437\u043d.)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430 (JSR 354)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 JSR API<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Joda-Money<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>BigDecimal<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430 (ISO 4217)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0431\u0438\u043b\u043b\u0438\u043d\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">decimal4j<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>long<\/code> (0\u201318 \u0437\u043d.)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430 (\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0437\u043a\u0430\u044f \u043b\u0430\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c, \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Commons Numbers Sum<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>double<\/code> (\u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u0447\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \/ \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Commons Numbers Precision<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>double<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435, \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ta4j DecimalNum\/DoubleNum<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>BigDecimal<\/code> \/ <code>double<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 \/ \u0414\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437, \u0431\u044d\u043a\u0442\u0435\u0441\u0442\u0438\u043d\u0433<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443<\/h3>\n<p>\u0412\u044b\u0431\u043e\u0440 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u2014 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0432\u043e\u043f\u0440\u043e\u0441 \u0443\u0431\u0435\u0436\u0434\u0435\u043d\u0438\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\"><strong>\u0422\u0438\u043f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0422\u043e\u0447\u043d\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\">double<\/p>\n<\/td>\n<td>\n<p align=\"left\">~15 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0446\u0438\u0444\u0440, \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f (\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0439 FPU)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, ML, \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438, \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043c\u0435\u0442\u0440\u0438\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\">float<\/p>\n<\/td>\n<td>\n<p align=\"left\">~7 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0446\u0438\u0444\u0440, \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0441\u0442\u0440\u043e, \u0432\u0434\u0432\u043e\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">GPU-\u0448\u0435\u0439\u0434\u0435\u0440\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439\/\u0437\u0432\u0443\u043a\u0430, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 ML-\u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043c\u0430\u0441\u0441\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\">BigDecimal<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0430\u044f, \u0442\u043e\u0447\u043d\u0430\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f (~100\u00d7 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 double)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u044f, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u043e\u0432, \u043d\u0430\u043b\u043e\u0433\u0438, \u0430\u0443\u0434\u0438\u0442, \u0440\u0435\u0433\u0443\u043b\u044f\u0442\u043e\u0440\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\">long fixed-point<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u0447\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0431\u0435\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0440\u0435\u0439\u0434\u0438\u043d\u0433, \u043f\u043b\u0430\u0442\u0451\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u0446\u0435\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"138\" width=\"138\">\n<p align=\"left\">decimal4j<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u0447\u043d\u043e, 0\u201318 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0441\u0442\u0440\u043e, \u0431\u0435\u0437 \u043c\u0443\u0441\u043e\u0440\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f fixed-point \u0441 API \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f, \u043c\u0435\u043d\u044c\u0448\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0447\u0435\u043c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e long<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u041b\u043e\u0432\u0443\u0448\u043a\u0438 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435<\/h3>\n<p>\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u0438\u043f \u2014 \u043b\u0438\u0448\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0434\u0435\u043b\u0430. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u2014 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0432\u044b\u0431\u043e\u0440 \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u0441 JSON-\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u043c\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h4>JSON-\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<p>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 JSON \u2014 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438: \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f JSON \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u0438\u043f \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0438 \u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435, \u043d\u0438 \u043e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>BigDecimal \u0438 \u043f\u043e\u0442\u0435\u0440\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430.<\/strong> \u041a\u043e\u0433\u0434\u0430 Jackson \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>BigDecimal<\/code>, \u043e\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a JSON-\u0447\u0438\u0441\u043b\u043e. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e <code>new BigDecimal(\"19.10\")<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 19.1 \u0432 JSON: \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0438\u0439 \u043d\u043e\u043b\u044c, \u043d\u0435\u0441\u0443\u0449\u0438\u0439 \u0441\u043c\u044b\u0441\u043b\u043e\u0432\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 <code>BigDecimal (scale = 2 \u043f\u0440\u043e\u0442\u0438\u0432 scale = 1)<\/code>, \u043c\u043e\u043b\u0447\u0430 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 <code>BigDecimal<\/code> \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>equals()<\/code> (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438) \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u0440\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0438 \u2014 \u044d\u0442\u043e \u0431\u0430\u0433.<\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <code>BigDecimal<\/code> \u043a\u0430\u043a JSON-\u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"java\">public class Invoice {\u00a0\u00a0\u00a0\u00a0@JsonFormat(shape = JsonFormat.Shape.STRING)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0private BigDecimal amount;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"50\" width=\"50\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435: &#171;19.10&#187; \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f &#171;19.10&#187; \u0432 JSON<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Jackson <code>ObjectMapper<\/code> \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"java\">ObjectMapper mapper = new ObjectMapper();mapper.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);mapper.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>WRITE_BIGDECIMAL_AS_PLAIN<\/code> \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 Jackson \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1.2E+3), \u0430 <code>USE_BIG_DECIMAL_FOR_FLOATS<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 JSON-\u0447\u0438\u0441\u043b\u0430 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a <code>BigDecimal<\/code> , \u0430 \u043d\u0435 \u043a\u0430\u043a <code>Double<\/code>.<\/p>\n<p><code><strong>double<\/strong><\/code><strong> \u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u043a\u0438.<\/strong> \u041a\u043e\u0433\u0434\u0430 Jackson \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>double<\/code>, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c <code>19.989999999999998<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>19.99<\/code>. \u042d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 double \u0432\u043d\u0443\u0442\u0440\u0438 \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442\u0435 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <em>\u0434\u043e<\/em> \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u043e\u0441\u043b\u0435.<\/p>\n<p><strong>long fixed-point.<\/strong> \u0415\u0441\u043b\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 <code>long<\/code> \u0446\u0435\u043d\u0442\u044b, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 <code>1999<\/code> (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435) \u0438 <code>19.99<\/code> (JSON). \u042d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u0437\u0430\u0442\u043e \u043e\u043d \u0434\u0430\u0451\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043b\u044e\u0431\u0443\u044e \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h4>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/h4>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043b\u043e\u0432\u0443\u0448\u0435\u043a. \u0421\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b: \u0434\u043b\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 <code>double<\/code> \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e, \u0430 \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430 \u2014 \u043d\u0430\u0432\u044b\u043a, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0435\u0434\u043a\u043e \u0443\u0447\u0430\u0442.<\/p>\n<p><strong>JUnit 5<\/strong> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 assertEquals \u0441 \u0434\u0435\u043b\u044c\u0442\u043e\u0439:<\/p>\n<pre><code class=\"java\">import static org.junit.jupiter.api.Assertions.assertEquals;@Testvoid testAverage() {\u00a0\u00a0\u00a0\u00a0double result = average(new double[]{0.1, 0.2, 0.3});\u00a0\u00a0\u00a0\u00a0assertEquals(0.2, result, 1e-15);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"54\" width=\"54\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0435\u043b\u044c\u0442\u0430 = \u0434\u043e\u043f\u0443\u0441\u043a: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0436\u0451\u0441\u0442\u043a\u0430\u044f \u2014 \u0442\u0435\u0441\u0442 \u0443\u043f\u0430\u0434\u0451\u0442 \u043d\u0430 CI; \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u044f\u0433\u043a\u0430\u044f \u2014 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442 \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>AssertJ<\/strong> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 API:<\/p>\n<pre><code class=\"java\">import static org.assertj.core.api.Assertions.assertThat;import org.assertj.core.data.Offset;import org.assertj.core.data.Percentage;@Testvoid testAverageAssertJ() {\u00a0\u00a0\u00a0\u00a0double result = average(new double[]{0.1, 0.2, 0.3});\u00a0\u00a0\u00a0\u00a0assertThat(result).isCloseTo(0.2, Offset.offset(1e-15)); \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0assertThat(result).isCloseTo(0.2, Percentage.withPercentage(0.0001)); (2)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"61\" width=\"61\">\n<p align=\"left\"><strong>1<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"61\" width=\"61\">\n<p align=\"left\"><strong>2<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a: \u0443\u0434\u043e\u0431\u0435\u043d, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442 \u0442\u0435\u0441\u0442\u0430 \u043a \u0442\u0435\u0441\u0442\u0443<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0414\u043b\u044f <\/strong><code><strong>BigDecimal<\/strong><\/code><strong> \u0442\u0435\u0441\u0442\u043e\u0432<\/strong>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>compareTo<\/code>, \u0430 \u043d\u0435 equals, \u0432 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f\u0445 \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0439\u0442\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431:<\/p>\n<pre><code class=\"java\">@Testvoid testVatCalculation() {\u00a0\u00a0\u00a0\u00a0BigDecimal result = calculateVat(new BigDecimal(\"100.00\"), new BigDecimal(\"0.22\"));\u00a0\u00a0\u00a0\u00a0assertThat(result.compareTo(new BigDecimal(\"22.00\"))).isZero();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>double \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439<\/h4>\n<p>JLS \u00a717.7 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 non-volatile <code>double<\/code> \u0438\u043b\u0438 <code>long<\/code> \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a <strong>\u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0438<\/strong>. \u0427\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c <em>\u0440\u0430\u0437\u043e\u0440\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/em> (\u0441\u0442\u0430\u0440\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u2014 \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0439), \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0435\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u0442\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d.<\/p>\n<pre><code class=\"java\">private double sharedPrice;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ UNSAFE: another thread may read a torn valueprivate volatile double sharedPrice; \u00a0 \/\/ SAFE: volatile guarantees atomic read\/write<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0430 64-\u0431\u0438\u0442\u043d\u044b\u0445 JVM, double \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0436\u0435\u043b\u0435\u0437\u0430, \u043e\u0434\u043d\u0430\u043a\u043e JLS \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043e\u0431\u0449\u0438\u0439 <code>double<\/code> \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0431\u0435\u0437 volatile, \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438.<\/p>\n<h2>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438<\/h2>\n<p>Javadoc \u0434\u043b\u044f <code>DoubleStream.sum()<\/code> \u044f\u0432\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f <em>\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d<\/em>. \u042d\u0442\u043e \u0432\u043b\u0435\u0447\u0451\u0442 \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435: <code>DoubleStream.parallel().sum()<\/code> \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0438 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<pre><code>double[] values = {0.1, 0.2, 0.3, 1e15, -1e15, 0.4};double seqSum = DoubleStream.of(values).sum(); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ sequential: consistentdouble parSum = DoubleStream.of(values).parallel().sum();\u00a0 \/\/ parallel: may differ between runs<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0438\u0447\u0442\u043e\u0436\u043d\u0430 \u2014 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 ULP \u0434\u043b\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0434\u043b\u044f \u043f\u043b\u043e\u0445\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0443\u043c\u043c (\u043a\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u0447\u0442\u0438 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430) \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b <strong>\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435<\/strong> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043b\u0438\u0431\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Kahan \u0438\u043b\u0438 Neumaier.<\/p>\n<p>\u042d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c \u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043d\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u043d\u0430 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u0451\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<h2>\u041a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0435 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u0441 DoubleAdder<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u0441\u0443\u043c\u043c\u0443 (\u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043c\u0435\u0442\u0440\u0438\u043a, \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438\u0442\u043e\u0433\u0438, \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u043d\u0430\u0438\u0432\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043d\u0435\u0441\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b. \u0411\u043b\u043e\u043a synchronized \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>AtomicReference&lt;BigDecimal&gt;<\/code> \u0441 CAS-\u0446\u0438\u043a\u043b\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 <code>BigDecimal<\/code> \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u0435. \u041e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0443\u044e \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u044e \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<\/p>\n<p>DoubleAdder (\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 Java 8) \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>\u043f\u043e\u043b\u043e\u0441\u043e\u0432\u044b\u0445 \u044f\u0447\u0435\u0435\u043a<\/strong>: \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0445 \u0441\u0443\u043c\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0438 \u0440\u0435\u0434\u043a\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u0437\u0430 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043a\u044d\u0448-\u0441\u0442\u0440\u043e\u043a\u0443. \u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>sum()<\/code>.<\/p>\n<pre><code class=\"java\">import java.util.concurrent.atomic.DoubleAdder;DoubleAdder totalRevenue = new DoubleAdder();totalRevenue.add(19.99); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ called from many threads, minimal contentiondouble current = totalRevenue.sum(); \/\/ aggregates all stripes when read<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441: <code>DoubleAdder.sum()<\/code> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c: \u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u0438\u0448\u0443\u0442 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u044b\u043c. \u0414\u043b\u044f \u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u043d\u0438\u043c\u043a\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f. \u041d\u043e \u0434\u043b\u044f \u043c\u0435\u0442\u0440\u0438\u043a, \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 (\u0433\u0434\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u043e-\u0438-\u0431\u044b\u0441\u0442\u0440\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u0442\u043e\u0447\u043d\u043e-\u0438-\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e) <code>DoubleAdder<\/code> \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432.<\/p>\n<p>\u0414\u043b\u044f <code>BigDecimal<\/code> \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u2014 <code>LongAdder<\/code> \u043d\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0446\u0435\u043d\u0442\u0430\u0445 \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432 <code>BigDecimal<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438.<\/p>\n<h3>Project Valhalla \u0438 \u0442\u0438\u043f\u044b-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 <code>double<\/code> \u0438\u043b\u0438 <code>long<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>BigDecimal<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 \u043a\u0443\u0447\u0435 \u0438 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 GC \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. Project Valhalla \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p><a href=\"https:\/\/openjdk.org\/jeps\/401\">JEP 401 (Value Classes and Objects)<\/a>, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 <em>preview<\/em>, \u0432\u0432\u043e\u0434\u0438\u0442 <em>\u043a\u043b\u0430\u0441\u0441\u044b-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/em>\u2014 \u043a\u043b\u0430\u0441\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0431\u043c\u0435\u043d \u043d\u0430 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438 \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u043d\u0433. \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u043e\u043b\u0435\u0439, \u0430 \u043d\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u043e\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438, \u0430 JVM \u0432\u043f\u0440\u0430\u0432\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b.<\/p>\n<p>\u0427\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432? \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0431\u0451\u0440\u0442\u043a\u0443 <code>Money<\/code>:<\/p>\n<pre><code class=\"java\">value class Money {\u00a0 \/\/ preview syntax, requires --enable-preview\u00a0\u00a0\u00a0\u00a0private final long cents;\u00a0\u00a0\u00a0\u00a0\/\/ ... arithmetic methods ...}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>Money<\/code> \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0431\u0435\u0437 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0443\u0447\u0438 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u0443\u0441\u043a\u043e\u043b\u044c\u0437\u0430\u043d\u0438\u044f. \u0414\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 GC, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e <code>BigDecimal<\/code> \u0434\u043e\u0440\u043e\u0433 \u0432 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430\u0445, \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432. <code>BigDecimal<\/code> \u0441\u0430\u043c \u0432\u0440\u044f\u0434 \u043b\u0438 \u0441\u0442\u0430\u043d\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u043e\u043c-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0435\u0433\u043e \u043f\u043e\u043b\u0435 <code>stringCache<\/code> \u043d\u0435\u0441\u0451\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u043e\u0432\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u044b-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0432\u0440\u043e\u0434\u0435 Optional \u0438 <code>LocalDate<\/code> \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c.<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0434\u0438\u0438 <em>preview<\/em>, <em>aka <\/em><a href=\"https:\/\/openjdk.org\/jeps\/401\">JEP 401<\/a>, \u0440\u0430\u043d\u043d\u0438\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 JDK 23. \u042d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 \u0432 JVM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u00ab\u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>double<\/code> \u0434\u043b\u044f \u0434\u0435\u043d\u0435\u0433\u00bb \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0411\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u043a\u043e\u0432\u0430: <strong>\u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0442\u0438\u043f, \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u0435\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0438, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/strong><\/p>\n<p><code>double<\/code> \u0431\u044b\u0441\u0442\u0440 \u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d \u2014 \u0438\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0433\u0434\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430. <code>BigDecimal<\/code> \u0442\u043e\u0447\u0435\u043d \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d \u2014 \u043d\u0435\u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0442\u0430\u043c, \u0433\u0434\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u0430 <code>long<\/code> \u0431\u044b\u0441\u0442\u0440\u0430 \u0438 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u2014 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<p>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u043d\u0435 \u0432\u044b\u0431\u043e\u0440 double \u0432\u043c\u0435\u0441\u0442\u043e <code>BigDecimal<\/code>. \u041e\u0448\u0438\u0431\u043a\u0430 \u2014 \u0432\u044b\u0431\u043e\u0440 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0431\u0435\u0437 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f <em>\u0442\u043e\u0433\u043e, \u043f\u043e\u0447\u0435\u043c\u0443<\/em>.<\/p>\n<h3>\u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f:<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/openjdk.org\/jeps\/306\">JEP 306: Restore Always-Strict Floating-Point Semantics<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/openjdk.org\/jeps\/401\">JEP 401: Value Classes and Objects (Preview)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/javamoney.github.io\/\">JSR 354: Java Money and Currency API<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/tools4j\/decimal4j\">decimal4j \u2014 Fast Fixed-Point Decimal Arithmetic<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/commons.apache.org\/proper\/commons-numbers\/\">Apache Commons Numbers<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.joda.org\/joda-money\/\">Joda-Money<\/a><\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/258\/484\/92d\/25848492d4cd2dcd1df595e475569a9a.png\" width=\"1560\" height=\"334\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/258\/484\/92d\/25848492d4cd2dcd1df595e475569a9a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/258\/484\/92d\/25848492d4cd2dcd1df595e475569a9a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p><a href=\"https:\/\/t.me\/+acrI2N6q080wZjM6\">\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c<\/a>\u00a0\u043a\u00a0\u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043d\u0430\u00a0Spring Boot \u0432\u00a0\u0442\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u00a0\u2014\u00a0<a href=\"https:\/\/t.me\/+acrI2N6q080wZjM6\">Spring \u0410\u0439\u041e<\/a>, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u0442\u044c \u0432\u00a0\u043a\u0443\u0440\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u00a0\u043c\u0438\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u00a0Spring Boot \u0438 \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e\u00a0\u0441\u00a0\u043d\u0438\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u043e.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1054074\/\">https:\/\/habr.com\/ru\/articles\/1054074\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043c\u0438\u0440\u0435 Java \u043d\u0435 \u0443\u0442\u0438\u0445\u0430\u0435\u0442 \u0438\u0437\u0432\u0435\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0440: \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c BigDecimal \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u043d\u0435\u0433?\u041a\u0440\u0430\u0442\u043a\u043e \u2014 \u043d\u0435\u0442. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430: \u043d\u0443\u0436\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0447\u0430\u0449\u0435 \u0432\u0435\u0434\u0451\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0434\u043e\u0433\u043c\u044b, \u0430 \u043d\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0433\u043e \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f. \u0423\u043c\u0435\u0441\u0442\u043d\u044b \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 \u00abdouble \u0441\u043b\u043e\u043c\u0430\u043d\u00bb, \u00abBigDecimal \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439\u00bb, \u00ab\u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443\u00bb \u0438\u043b\u0438 \u00ab\u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439 IEEE 754\u00bb \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0435\u043f\u043e\u0434\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0430\u044f \u0438\u0441\u0442\u0438\u043d\u0430. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0443\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.\u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 IEEE 754, \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u043a\u0430\u043c\u043d\u0438 BigDecimal \u0438 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0448\u0430\u044e\u0442 \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430 \u0432\u0430\u0441, \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043c production \u043b\u043e\u0432\u0443\u0448\u043a\u0430\u043c\u0438 (\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c), \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c\u0438 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u0432\u0435\u0441\u0442\u0438 \u043d\u0430 \u043d\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440. \u0420\u0430\u0437\u0434\u0435\u043b\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043a\u043e\u0434.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u043e\u0441\u0445\u043e\u0434\u044f\u0442 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0444\u0430\u043a\u0442\u0443: Java-\u0442\u0438\u043f\u044b float \u0438 double \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e. \u041f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0438 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u2014 \u043e\u0441\u043d\u043e\u0432\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.IEEE 754float \u0438 double \u0432 Java \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE 754: float \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 binary32, double \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 binary64. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0437\u0434\u0435\u0441\u044c \u2014 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0431\u0438\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u044b \u2014 \u0432\u0441\u0451 \u0432 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 2. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u0447\u0438\u0441\u043b\u0430, \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439.\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:public class FloatingPointProblem {\u00a0\u00a0\u00a0\u00a0public static void main(String[] args) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double x = 0.1 + 0.2;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(x);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ 0.30000000000000004\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(x == 0.3); \u00a0 \/\/ false \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)\u00a0\u00a0\u00a0\u00a0}}0.1 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435; \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 binary64\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u0435\u0439 \u0438\u0437-\u0437\u0430 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u042d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e double \u0441\u043b\u043e\u043c\u0430\u043d. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b 0.1 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0442\u043e\u0447\u043d\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u2014 \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a 1\/3 \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 0.1 \u0432 Java, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 binary64: 0.1000000000000000055511151231257827021181583404541015625. \u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0443\u044e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c.double \u0431\u044b\u0441\u0442\u0440, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u0435\u043d \u0438 \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u043e \u0432 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043e\u043d \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0440\u043e\u0434\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u043e\u0447\u0435\u043d. \u042d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433 \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043f\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0443, \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u0445 \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d.\u041d\u0430\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e\u0421\u0430\u043c\u0430\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u2014 \u043d\u0435 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 ==.\u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a:if (result == expected) { &#8230; }\u00a0 \/\/ dangerous with floating-point\u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0439\u0442\u0435 \u0441 \u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 epsilon):boolean nearlyEqual(double a, double b, double epsilon) {  return Math.abs(a &#8212; b) &lt;= epsilon;}\u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0448\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f (\u0441\u043a\u0430\u0436\u0435\u043c, \u043e\u0442 0.0001 \u0434\u043e 1_000_000), \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 epsilon \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0436\u0451\u0441\u0442\u043a\u0438\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043b\u0438\u0431\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u044f\u0433\u043a\u0438\u0439 \u0434\u043b\u044f \u043c\u0430\u043b\u044b\u0445. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a:boolean nearlyEqualRelative(double a, double b, double relTol) {\u00a0\u00a0\u00a0\u00a0double diff = Math.abs(a &#8212; b);\u00a0\u00a0\u00a0\u00a0double norm = Math.max(Math.abs(a), Math.abs(b));\u00a0\u00a0\u00a0\u00a0return diff &lt;= relTol * norm;}\u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u043e\u043f\u0443\u0441\u043a\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u043e\u043f\u0443\u0441\u043a; \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u043a\u043e\u0432. \u0413\u043b\u0430\u0432\u043d\u043e\u0435: \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0435\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d if.strictfp, \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 x87 FPU \u0438 \u0442\u0438\u0445\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Java 17Java 1.0 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 IEEE 754, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Intel x87 FPU \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 80-\u0431\u0438\u0442\u043d\u043e\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0412 Java 1.2 \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441:\u0440\u0435\u0436\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e , \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0432\u0448\u0438\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0438 \u0434\u0430\u0432\u0430\u0432\u0448\u0438\u0439 \u0441\u043b\u0435\u0433\u043a\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435)\u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0440\u0435\u0436\u0438\u043c, \u0442\u043e\u0447\u043d\u044b\u0439 IEEE 754, \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e strictfp\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b strictfp, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043c\u043e\u0433\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043a \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442 \u0432\u0438\u0434 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0437\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043a\u043e\u0448\u043c\u0430\u0440.JEP 306 \u0432 Java 17 \u0440\u0435\u0448\u0438\u043b \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e (SSE2, AVX) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 IEEE 754 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u043e\u0442\u0435\u0440\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 JEP 306 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u0442\u0440\u043e\u0433\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u043a\u0430\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 strictfp \u0442\u0435\u043f\u0435\u0440\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f no-op: \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0434\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430.\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434: \u043d\u0430 Java 17+ \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u0430 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0435 strictfp \u0432 \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.\u041c\u0438\u043d\u044b NaN \u0438 -0.0IEEE 754 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u0432\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0447\u0438\u0441\u0435\u043b.NaN (Not a Number)* \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c: \u043e\u043d\u043e \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0441\u0435\u0431\u0435. \u042d\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \u0438 Java \u0442\u043e\u0447\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0435\u043c\u0443:double nan = Double.NaN;System.out.println(nan == nan);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ false\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(Double.compare(nan, nan)); \/\/ 0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)System.out.println(Double.isNaN(nan));\u00a0 \u00a0 \u00a0 \u00a0 \/\/ true\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 == \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 NaN != NaN, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 IEEE 754Double.compare() \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NaN \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 == \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 NaN != NaN, \u043e\u0434\u043d\u0430\u043a\u043e Double.compare() \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NaN \u0440\u0430\u0432\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0430 Double.valueOf(NaN).equals(Double.valueOf(NaN)) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true \u0440\u0430\u0434\u0438 HashMap \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 double \u043a\u0430\u043a \u043a\u043b\u044e\u0447\u0438 \u0432 \u043b\u043e\u0433\u0438\u043a\u0435 \u0438\u043b\u0438 \u0432 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0432\u0435\u0442\u0432\u044f\u0445, \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Double.isNaN().-0.0 (\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c)* \u2014 \u0434\u0440\u0443\u0433\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430:System.out.println(0.0 == -0.0);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ true\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)System.out.println(Double.compare(0.0, -0.0)); \/\/ 1 (0.0 &gt; -0.0) (2)System.out.println(1.0 \/ 0.0);\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ InfinitySystem.out.println(1.0 \/ -0.0); \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ -Infinity \u00a0 \u00a0 \u00a0 (3)123\u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 0.0 == -0.0Double.compare \u0438 Double.valueOf().equals() \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0442\u044c \u0438\u0445\u0414\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 -0.0 \u0434\u0430\u0451\u0442 -Infinity, \u0430 \u043d\u0435 +Infinity\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 double \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c NaN \u0438\u043b\u0438 -0.0, \u044f\u0432\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0439\u0442\u0435 \u0438\u0445 \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f\u0445 \u0438\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439.\u041a\u043e\u0433\u0434\u0430 double \u2014 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440\u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0442\u044f\u043d\u0443\u0442\u0441\u044f \u043a BigDecimal \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b. double \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440, \u043a\u043e\u0433\u0434\u0430:\u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430, \u043c\u0435\u0442\u0440\u0438\u043a\u0430 \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0441 \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ULP \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. ( ULP (Unit in the Last Place) \u2014 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 double \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b. \u042d\u0442\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439.)\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u0430\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b GPS, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0439 \u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u044b \u0443\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0448\u0443\u043c. \u0414\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442.\u0412\u0430\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044cdouble \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e FPU. \u042d\u0442\u043e \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c BigDecimal.\u041e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445\u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0434\u0443\u0442\u0441\u044f \u0432 double \u0438 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0430 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e:double average(double[] values) {\u00a0\u00a0\u00a0\u00a0double sum = 0.0;    for (double v : values) sum += v;    return sum \/ values.length;}\u0414\u043b\u044f \u0434\u0435\u0441\u044f\u0442\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u041d\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u0442\u044b\u0441\u044f\u0447 \u0438\u043b\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432? \u041a\u0430\u0436\u0434\u043e\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e ULP, \u0438 \u044d\u0442\u0438 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u0445 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0432\u0435\u0442\u0430 \u2014 \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e double \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e. \u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c: \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 double \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u0431\u043e\u0440 \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 double \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u044e\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c.\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439\u0412\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 double, \u0431\u0435\u0437 BigDecimal . \u0412\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0430\u0445\u0430\u043d\u0430\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u0440\u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u043c\u0430\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f. \u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u041a\u0430\u0445\u0430\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438 , \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0451 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435.double kahanSum(double[] values) {\u00a0\u00a0\u00a0\u00a0double sum = 0.0;\u00a0\u00a0\u00a0\u00a0double compensation = 0.0; \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (1)\u00a0\u00a0\u00a0\u00a0for (double value : values) {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double y = value &#8212; compensation;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0double t = sum + y;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0compensation = (t &#8212; sum) &#8212; y;\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 (2)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0sum = t;\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0return sum;}\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u044b\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0435 \u0431\u0438\u0442\u044b \u2014 \u0441\u0443\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 n, \u0442\u043e\u0433\u0434\u0430 \u043a\u0430\u043a \u0443 \u043d\u0430\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 O(n). \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043c\u0435\u0442\u043e\u0434\u0430 \u041a\u0430\u0445\u0430\u043d\u0430 \u0435\u0441\u0442\u044c \u0441\u043b\u0430\u0431\u043e\u0435 \u043c\u0435\u0441\u0442\u043e: \u0435\u0441\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0443\u043c\u043c\u0443, \u043b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0430\u0446\u0438\u0438 \u0434\u0430\u0451\u0442 \u0441\u0431\u043e\u0439. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440\u0430 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a.\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u041a\u0430\u0445\u0430\u043d\u0430\u2013\u0411\u0430\u0431\u0443\u0448\u043a\u0438 \u043f\u043e \u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440\u0443\u041d\u0451\u0439\u043c\u0430\u0439\u0435\u0440 (1974) \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u043e\u0435 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u044b: \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-485709","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485709"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/485709\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}