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:
It works.
But the problem is that it doesn't give me enough precision.
For example:
(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.
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=' '; 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 --> 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?
Thanks in advance for your answers.
RE: How to improve the precision of this base converter function on Matlab?
TTFN
I can do absolutely anything. I'm an expert!
FAQ731-376: Eng-Tips.com Forum Policies forum1529: Translation Assistance for Engineers
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