user1824904
user1824904

Reputation: 19

Adding 1 to very small numbers

I have a question about adding the number 1 to very small numbers. Right now, I am trying to plot a circular arc in the complex plane centered around the real number 1. My code looks like:

arc = 1 + rho .* exp(1i.*theta);

The value rho is a very small number, and theta runs from 0 to pi, so whenever 1 is added to the real part of arc, MATLAB seems to just round it to 1, so when I type in plot(real(arc),imag(arc)), all I see is a spike instead of a semicircle around 1. Does anyone know how to remedy this so that MATLAB will not round 1 + real(arc) to 1, and instead conserve the precision?

Thanks

Upvotes: 1

Views: 740

Answers (3)

Bitwise
Bitwise

Reputation: 7805

There is a builtin solution for exactly this probem:

exp1m()

log1p()

explicitly:

log(arc)=log1p(rho*exp(1i*theta))

to get what you need.

Of course you need to work in log space to represent this precision, but this is the typical way this is done.

Upvotes: 2

Aki Suihkonen
Aki Suihkonen

Reputation: 20087

rho=1e-6; theta=0:pi/100:pi; arc=1+rho*exp(1i.*theta); plot(arc); figure(); plot(arc-1);

Shows, that the problem is in plot, not in loss of precision. After rho<1e-13 there will be expected trouble with precision.

The two other possible misconceptions:
- doubles have finite precision. 16 decimal digits or 1+2^-52 is the limit with doubles.
- format short vs. format long -- matlab shows by default only 6 or 7 digits

It also happens to be that 6-7 digits is the limit of a 32-bit float, which could explain also that perhaps the plot function in Octave 3.4.3 is also implemented with floats.

Left: 1+1e-6*exp, Right: (1+1e-6*exp)-1

Upvotes: 3

arne.b
arne.b

Reputation: 4340

In double precision floating point representations, the smallest number strictly greater than 1 that can be represented is 1 + 2^-52.

This is a limitation imposed by the way non-integer numbers are represented on most machines that can be avoided in software, but not easily. See this question about approaches for MATLAB.

Upvotes: 1

Related Questions