×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Are you an
Engineering professional?
Join Eng-Tips Forums!
• Talk With Other Members
• Be Notified Of Responses
• Keyword Search
Favorite Forums
• Automated Signatures
• Best Of All, It's Free!

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

#### Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

# How to improve the precision of this base converter function on Matlab?

## How to improve the precision of this base converter function on Matlab?

(OP)
Hello.

I'm trying to create a function on Matlab that converts a base 10 (decimal) real number into another base.

I wrote this function:

#### CODE --> Matlab

function [converted_number] = base_converter(base,number,digits)

format longG

separator=' ';

digits=digits-1;

integer_part=floor(number);
fractional_part=number-integer_part;

converted_number='';

if integer_part==0
converted_number=['0'];
end

while integer_part~=0

converted_number=[converted_number,separator,num2str(mod(integer_part,base))];
integer_part=(integer_part-mod(integer_part,base))./base;

end

while fractional_part~=0 && digits~=0

fractional_part=fractional_part.*base;
converted_number=[converted_number,separator,num2str(floor(fractional_part))];
fractional_part=fractional_part-floor(fractional_part);
digits=digits-1;

end

end 

It works.

But the problem is that it doesn't give me enough precision.

For example:

#### CODE --> Matlab

base_converter(12,1./11,50)

ans =

0 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 11 10 1 11 5 1 11 0 3 11 3 

(the 1s should be repeating indefinitely)

It has a precision of about 10^(-16) only. I would need much more precision.

Maybe there is a way to modify my function so that it would have an arbitrary precision?

### RE: How to improve the precision of this base converter function on Matlab?

You are passing a double precision number as an argument. 1./11 will be truncated before the function even gets started. I assume you are writing this for entertainment, not out of necessity.

"help eps" for an explanation of about "10^(-16) only"

Note that apparently simple fractions like 1/10 disappoint many Matlab users. 0.3-0.2-0.1 doesn't give the 0.0 expected by many newcomers (often referred to as a "bug"). Floating point is based on binary fractions, not decimal fractions.

Surprisingly (for some), Matlab copes with expressions like 0:0.1:1.0 quite happiy. It doesn't create the row vector by repeatedly adding 0.1, (which wouldn't work), it's more clever than that.

If you really need arbitrary precision, your algorithm is not a good one. Never good to depend on knife-edges or work near cliffs.

Steve

#### Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

#### Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Close Box

# Join Eng-Tips® Today!

Join your peers on the Internet's largest technical engineering professional community.
It's easy to join and it's free.

Here's Why Members Love Eng-Tips Forums:

• Talk To Other Members
• Notification Of Responses To Questions
• Favorite Forums One Click Access
• Keyword Search Of All Posts, And More...

Register now while it's still free!