Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.

Topic: precision of floating number in matlab and c++
Replies: 11   Last Post: Jul 25, 2013 5:28 PM

 Messages: [ Previous | Next ]
 Ki Posts: 16 Registered: 5/20/12
Re: precision of floating number in matlab and c++
Posted: Jul 25, 2013 11:51 AM

"someone" wrote in message <ksrc4v\$sk1\$1@newscl01ah.mathworks.com>...
> "WK" wrote in message <ksqn5p\$96t\$1@newscl01ah.mathworks.com>...
> > "James Tursa" wrote in message <ksqev5\$lk3\$1@newscl01ah.mathworks.com>...
> > > "WK" wrote in message <ksptao\$eoq\$1@newscl01ah.mathworks.com>...
>
> ... SNIP ...
>

> > I check the result, it gives the same sequence as matlab does (I only check up to the 4 decimal places). Well, it these two sequences are different, so how matlab generating that? and why they are different if both use double precision?
>
> You really need to check to more than 4 decimal places.
>
> You would probably get a SLIGHTLY different sequence if you used linspace instead of the colon operator or a for loop (as you did with C++), for example.
>
> Take a look at the at the references in the MATLAB FAQ:
>
> <<http://matlab.wikia.com/wiki/FAQ#Why_is_0.3_-_0.2_-_0.1_.28or_similar.29_not_equal_to_zero.3F>>
>
> for a more detailed discussion of floating point numbers.
>
> Also, (and this is out of my comfort zone) as I recall the c/c++ specification for floating point precision is machine/complier independent. That is, it does not specify whether double precision is 16, 32, or 64 bits. It simply requires that:
> double precision >= single precision
> As I said, I may not be up to date on this topic, but that is my recollection.

The compiler I am using is running in 64bit linux system and it uses 64bits to for double precision. The MATLAB I am running is in 64bit windows 8 and also 64bit precision for double. But I am wondering it the floating point representation in matlab is of different standard. I try

sprintf('%.100f', 1/3)

it shows 0.3333333333333333100000000000000000000000000000000000000000000000000000000000000000000000000000000000

in c++, I try
cout << setprecision(100) << 1.0/3.0 << endl;

it shows
0.333333333333333314829616256247390992939472198486328125

Date Subject Author
7/21/13 Ki
7/21/13 James Tursa
7/24/13 Ki
7/24/13 Ki
7/25/13 Ki
7/25/13 Ki
7/25/13 Curious
7/25/13 James Tursa
7/25/13 Ki
7/25/13 Curious
7/25/13 Steven Lord
7/25/13 Ki