The result of the calculation is undefined in pretty much any
language. The loose definition of the expression is “return a value
100 times a value approximating 29 and truncated to an integer using
the algorithm of your choice.” So, you claim the only right answer
must be the one yielded by Lisp. However, the correct answer is: The
result of evaluating this expression is implementation-specific.
In C:
#include <stdio.h>
int main(void) {
double d = 0.29;
float f = 0.29;
printf(“double truncated to integer is: %i\n”, (int)(d * 100));
printf(“float truncated to integer is: %i\n”, (int)(f * 100));
return 0;
}
Would ANSI[1] C results be correct enough to be used as a gold
standard? Well, if so, the result of the program above is:
$ ./foo
double truncated to integer is: 28
float truncated to integer is: 29
The moral of the story is not “use Lisp”. The moral is use floating
point numbers with great care. Oh, geez, I totally forgot, this is a
Ruby list, not a C list.
The result of the calculation is undefined in pretty much any
language. The loose definition of the expression is “return a value
100 times a value approximating 29 and truncated to an integer using
the algorithm of your choice.” So, you claim the only right answer
must be the one yielded by Lisp.
Agreed. And, btw, with BigDecimal even Ruby comes up with more
“natural” results:
require ‘bigdecimal’
x = BigDecimal.new “0.29”
x *= 100
puts x
printf “%f %10.8f\n”, x, x
→
0.29E2
29.000000 29.00000000
However, the correct answer is: The
result of evaluating this expression is implementation-specific.
Actually, this is only half true: if the implementation is IEEE-754
standards conform then it must yield certain results - regardless of
implementation. I believe nowadays most if not all math libraries
conform to the standard so you should expect to see the same results
from all implementations. I would assume that differences are mostly
due to numeric data type (see your C example) and conversion for
printing (e.g. how many places are output by default).
100 times a value approximating 29 and truncated to an integer using
the algorithm of your choice." So, you claim the only right answer
must be the one yielded by Lisp. However, the correct answer is: The
result of evaluating this expression is implementation-specific.
My point being that there are some implementations that are more
useful and helpful than others.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.