Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations pierreick on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

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

Status
Not open for further replies.

OmegaForce

Industrial
Mar 9, 2015
3
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:
function [converted_number] = base_converter(base,number,digits)

format longG

separator=' ';
radix_character='.';

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

converted_number=[converted_number,separator,radix_character];

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:
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?

Thanks in advance for your answers.
 
Replies continue below

Recommended for you

Additional comments...

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
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor