<div dir="ltr"><div><div><div><div><div>In most cases where the rounding is needed, it is better to replace <br><br><span>int i = vector.size() * d;<br><br></span></div><span>with <br><br></span><span>int i = floor(vector.size() * d+0.5);<br><br></span></div></div>If it is the floor function that you are looking for, it will be better to use the following <br><br><span>int i = floor(vector.size() * d+1e-9);</span><br><br></div>where 1e-9 can be another very small number (but not too small).<br><br></div><br><br><div><div><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 21, 2016 at 11:12 AM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
On 21 June 2016 at 17:01, Andreas Prescher wrote:<br>
| Hello,<br>
|<br>
| I thought it was easy to understand.<br>
|<br>
| Ok:<br>
|<br>
| void foo(double d) {<br>
|       std::vector<int> vector;<br>
|       for(int i = 0; i < 75; i++) {<br>
|               vector.push_back(i);<br>
|       }<br>
|       int i = vector.size() * d;<br>
| }<br>
|<br>
| from R:<br>
| foo(1/3)<br>
|<br>
| foo is inside package built with<br>
| package skeleton.<br>
|<br>
| Hope its more clear now.<br>
<br>
</span>Sure. Appears to be a variant of R FAQ 7.31:<br>
<br>
   <a href="https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f" rel="noreferrer" target="_blank">https://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f</a><br>
<br>
<br>
Also google 'what every computer scientist should know about floating point' and<br>
related documents.  The canonical reference is<br>
<br>
   <a href="http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html" rel="noreferrer" target="_blank">http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html</a><br>
<br>
but there are many other related writeups.<br>
<br>
<br>
You can even google for 'R FAQ 7.31' and get hits...<br>
<span class="HOEnZb"><font color="#888888"><br>
Dirk<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
| Andreas<br>
|<br>
|<br>
|<br>
| Am 21.06.2016 um 16:49 schrieb Dirk Eddelbuettel:<br>
| ><br>
| > On 21 June 2016 at 16:33, Andreas Prescher wrote:<br>
| > | Hello,<br>
| > |<br>
| > | calling my function from R with<br>
| > | f(1/3) gives different results<br>
| > | on ubuntu 12.04 32 bit<br>
| > | and 14.04 64 bit, e.g:<br>
| > |<br>
| > | void f(double d) {<br>
| > |   int i = vector.size() * d;<br>
| > | }<br>
| > | Given vector of size 75<br>
| > | I get 25 on 14.04 64 bit<br>
| > | and 24 on 12.04 32 bit.<br>
| > |<br>
| > | Size of int is 4 byte,<br>
| > | double 8 byte on both systems.<br>
| > |<br>
| > | Does anybody have an idea<br>
| > | how to get same result<br>
| > | on both machines?<br>
| ><br>
| > Please provide a _complete_ and _reproducible_ example.<br>
| ><br>
| > Dirk<br>
| ><br>
| ><br>
| > |<br>
| > | Thanks in advance,<br>
| > |<br>
| > | Andreas<br>
| > |<br>
| > | (Further information:<br>
| > | 14.04 64 bit machine:<br>
| > | g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4<br>
| > | R version 3.0.2 (2013-09-25)<br>
| > |<br>
| > | 12.04 32 bit:<br>
| > | g++ 4.6.3<br>
| > | R 3.2.2)<br>
| > |<br>
| > | _______________________________________________<br>
| > | Rcpp-devel mailing list<br>
| > | <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
| > | <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" rel="noreferrer" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
| ><br>
|<br>
|<br>
| _______________________________________________<br>
| Rcpp-devel mailing list<br>
| <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
| <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" rel="noreferrer" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
<br>
</div></div><span class="im HOEnZb">--<br>
While traveling abroad, the router hung which left me unable to access email<br>
for a few days (and also blocked access to my website, blog, @cranberries, ...)<br>
Please accept my apologies for delayed and/or somewhat brief replies.<br>
--<br>
<a href="http://dirk.eddelbuettel.com" rel="noreferrer" target="_blank">http://dirk.eddelbuettel.com</a> | @eddelbuettel | <a href="mailto:edd@debian.org">edd@debian.org</a><br>
</span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" rel="noreferrer" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
</div></div></blockquote></div><br></div>