<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
					xmlns:content="http://purl.org/rss/1.0/modules/content/"
					xmlns:wfw="http://wellformedweb.org/CommentAPI/"
					xmlns:atom="http://www.w3.org/2005/Atom"
				  >
<channel>
<atom:link rel="self"  type="application/rss+xml"  href="http://rulinux.net/rss_from_sect_4_subsect_6_thread_36417"  />
<title>rulinux.net - Форум - Development - Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>http://rulinux.net/</link>
<description><![CDATA[Портал о GNU/Linux и не только]]></description>
<image><title>rulinux.net - Форум - Development - Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>http://rulinux.net/</link>
<url>http://rulinux.net/rss_icon.png</url>
</image>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Уже не срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#135640</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#135640</guid>
<pubDate>Sat, 14 Apr 2012 07:39:46 +0400</pubDate>
<description><![CDATA[<p><i>> Странный ты</i><br> нет, ты<br><br><i>> выбросил обе операции округления</i><br> результат смотрел?</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Уже не срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#135631</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#135631</guid>
<pubDate>Sat, 14 Apr 2012 07:14:51 +0400</pubDate>
<description><![CDATA[<p>&gt; где же тут округление?
Странный ты - выбросил обе операции округления, которые сам же и советовал, и спрашиваешь где они :)</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Уже не срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#135626</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#135626</guid>
<pubDate>Sat, 14 Apr 2012 06:29:43 +0400</pubDate>
<description><![CDATA[<p>Это вообще-то не имеет ничего с округлением. Как насчёт такого?<br><br><fieldset><legend>c</legend><code><br />
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339933;">#include &lt;math.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">double</span> a<span style="color: #339933;">=</span><span style="color:#800080;">0.85</span><span style="color: #339933;">;</span><br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%.60f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
&nbsp;</code></fieldset><br><br>где же тут округление? Это просто последствия хранения в виде floating point. Если нужны точные вычисления, в приличных языках для этого есть другие средства, например rationalp</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Уже не срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#135612</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#135612</guid>
<pubDate>Fri, 13 Apr 2012 22:36:32 +0400</pubDate>
<description><![CDATA[<p>Вобщем и месяца не прошло как разобрались - код там и правда непростой.
Дело в том что вышеприведённые варианты округления не для всех чисел одинаково хорошию Есть такие значения, что не помещаются в разрядной сетке мантиссы и поэтому double их обрубает c уменьшением абсолютного значения. Вот например 0.85 округлённое по твоим формулам до тысячных, после округления станет несколько меньше:

<fieldset><legend>c</legend><code><br />
<br />
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span><br />
<span style="color: #339933;">#include &lt;stdio.h&gt;</span><br />
<span style="color: #339933;">#include &lt;math.h&gt;</span><br />
<br />
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #993333;">double</span> a<span style="color: #339933;">=</span><span style="color:#800080;">0.85</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #993333;">double</span> b <span style="color: #339933;">=</span> trunc <span style="color: #009900;">&#40;</span>a <span style="color: #339933;">*</span> 1000.0 <span style="color: #339933;">+</span> 0.5<span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color:#800080;">1000.0</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #993333;">double</span> b2<span style="color: #339933;">=</span>trunc<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> round<span style="color: #009900;">&#40;</span>1000.0<span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span>a <span style="color: #339933;">-</span> trunc<span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color:#800080;">1000.0</span><span style="color: #339933;">;</span><br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%.60f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span style="color: #000066;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%.60f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>b2<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
&nbsp;</code></fieldset>

А это не годится например при интенсивном накоплении суммы вычислений в которых используется округление, ошибка ведь будет накапливаться. Приходится извращаться.

</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131502</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131502</guid>
<pubDate>Sat, 17 Mar 2012 01:35:53 +0400</pubDate>
<description><![CDATA[<p>у нас тут приличный форум и так выражаться не принято</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131501</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131501</guid>
<pubDate>Sat, 17 Mar 2012 01:35:05 +0400</pubDate>
<description><![CDATA[<p><i>> Через trunc - это правильнее, производительнее, точнее или что? </i><br> нет, одинаково. Если нужна эта добавка 0.5 пользуй round, без разницы.<br><br><i>> Что за извраты? Наверное они меня и интерсуют.</i><br> например просто проверка на величину числа, если оно по размеру превышает некоторую величину, то либо заведомо точности не хватает для отображения знаков после запятой и можно ничего не делать для их отбрасывания, либо взять <br><br>trunc(a) + round(1000.0*(a - trunc(a)))/1000.0;<br><br>тоесть работать только с дробной частью, заведомо избежав риска умножить какое-нибудь 1.0Е+306 так что результат вызовет переполнение</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131446</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131446</guid>
<pubDate>Fri, 16 Mar 2012 12:38:07 +0400</pubDate>
<description><![CDATA[<p>Мущщина, ебанитесь! Любой корпорац делает это.</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131442</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131442</guid>
<pubDate>Fri, 16 Mar 2012 10:34:00 +0400</pubDate>
<description><![CDATA[<p>фапси чтоли какоеннить?</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131439</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131439</guid>
<pubDate>Fri, 16 Mar 2012 10:26:21 +0400</pubDate>
<description><![CDATA[<p>&gt; С каких это пор алгоритмы являются проприетарщиной? На них вроде даже патенты в нормальных странах не дают. Чего скрывать?
<br>
<br>
Не я пишу полиси в своей конторе. </p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131434</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131434</guid>
<pubDate>Fri, 16 Mar 2012 09:14:45 +0400</pubDate>
<description><![CDATA[<p>&gt; b = trunc (a * 1000.0 + 0.5) / 1000.0;
<br>
Если было бы сделано так - то я бы не удивлялся. 
<br>
А ты можешь объяснить почему именно через trunc у тебя реализовано? Почему бы не сделать так:
<br>
b = round(a * 1000.0) / 1000.0;
<br>
Например на одну операцию (сложения) меньше выходит? Через trunc - это правильнее, производительнее, точнее или что?
<br>
<br>
&gt; при крупных числах может быть баг переполнения, посему для них нужны особые извраты, но это редко нужно.
<br>
Что за извраты? Наверное они меня и интерсуют. То, на что я смотрю выглядит как бажный индусокод, но может оказаться чем-то охуенно гениальным. Плюс там не только тупое переполнение будет, но проблема приведения чисел к одинаковой экспоненте при которой &quot;0.5&quot; утратит значимость, но я не вижу как тот код, на который я смотрю, мог бы решить эту проблему.</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131424</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131424</guid>
<pubDate>Fri, 16 Mar 2012 06:31:35 +0400</pubDate>
<description><![CDATA[<p><i>> Алгоритм дать не могу - проприетарщина</i><br> С каких это пор алгоритмы являются проприетарщиной? На них вроде даже патенты в нормальных странах не дают. Чего скрывать?</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131422</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131422</guid>
<pubDate>Fri, 16 Mar 2012 00:08:24 +0400</pubDate>
<description><![CDATA[<p>хм умножаешь на 10^(нужное количество знаков), добавляешь 0,5 если нужно округлить, а не просто отбросить лишние цифры, отбрасываешь дробную часть и потом делишь на то же 10^(нужное количество знаков), вроде всё очевидно. Типа того<br><br>b = trunc (a * 1000.0 + 0.5) / 1000.0;<br><br>при крупных числах может быть баг переполнения, посему для них нужны особые извраты, но это редко нужно.</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131421</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131421</guid>
<pubDate>Thu, 15 Mar 2012 22:27:02 +0400</pubDate>
<description><![CDATA[<p>int(a*(10^n)) / double(10^n) </p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131416</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131416</guid>
<pubDate>Thu, 15 Mar 2012 20:27:15 +0400</pubDate>
<description><![CDATA[<p>Да проблема в том что нужно как-то обосновать что текущая имплементация говно, остальное пускай девелоперы думают чо как фиксить. Алгоритм там не совсем такой как ты описываешь - поэтому и пытаюсь найти чего-нить похожее чтобы понять зачем так вообще делали</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131414</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131414</guid>
<pubDate>Thu, 15 Mar 2012 20:20:29 +0400</pubDate>
<description><![CDATA[<p>Если проприетарщина, предлагаю  домножать на нужное кол-во нулей, а все остальное после запятой дропать или я не понял вопроса ? </p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131413</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131413</guid>
<pubDate>Thu, 15 Mar 2012 20:19:10 +0400</pubDate>
<description><![CDATA[<p>Выбрать пример с floor и 0.5<br><br>?</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131412</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131412</guid>
<pubDate>Thu, 15 Mar 2012 20:14:48 +0400</pubDate>
<description><![CDATA[<p>ну... не знаю...</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131411</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131411</guid>
<pubDate>Thu, 15 Mar 2012 20:14:35 +0400</pubDate>
<description><![CDATA[<p>Алгоритм дать не могу - проприетарщина, выпасут - выебут. </p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131410</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131410</guid>
<pubDate>Thu, 15 Mar 2012 20:12:25 +0400</pubDate>
<description><![CDATA[<p>Меня больше интересует алгоритмическая сторона вопроса</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131409</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131409</guid>
<pubDate>Thu, 15 Mar 2012 20:11:43 +0400</pubDate>
<description><![CDATA[<p>Десятичного, с двоичным-то всё просто</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131408</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131408</guid>
<pubDate>Thu, 15 Mar 2012 20:11:02 +0400</pubDate>
<description><![CDATA[<p>http://stackoverflow.com/questions/798046/digit-limitation-from-decimal-point-in-c</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131407</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131407</guid>
<pubDate>Thu, 15 Mar 2012 20:10:16 +0400</pubDate>
<description><![CDATA[<p>Алгоритм давай, в котором сомневаешься. Ну и насколько платформеннонезависимым должен быть</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131406</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131406</guid>
<pubDate>Thu, 15 Mar 2012 20:09:49 +0400</pubDate>
<description><![CDATA[<p>snprintf(buf, len, &quot;%0.2f&quot;, in) + sscanf(buf, &quot;%f&quot;, &amp;out);</p>]]></description>
</item>
<item>
<title>Re:Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131405</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131405</guid>
<pubDate>Thu, 15 Mar 2012 20:05:01 +0400</pubDate>
<description><![CDATA[<p>Знака двоичного или десятичного?</p>]]></description>
</item>
<item>
<title>Округление double то нужного кол-ва знаков после запятой. Срочно.</title>
<link>https://rulinux.net/message.php?newsid=36417&amp;page=1#131403</link>
<guid>https://rulinux.net/message.php?newsid=36417&amp;page=1#131403</guid>
<pubDate>Thu, 15 Mar 2012 19:57:40 +0400</pubDate>
<description><![CDATA[<p>Граждане, а не могли бы вы накидать мне ссылков на алгоритмы округления типа double до произвольного знака после запятой? 
<br>
А то тут наткнулся на реализацию подобной функции, которая выглядит как явный баг, но доказать не могу (тем более что ошибка в пределах эпсилона, но её там могло бы не быть). </p>]]></description>
</item>
</channel>
</rss>