MATLAB Can someone briefly explain fixed-point? MATLAB

  • Thread starter Thread starter mikeph
  • Start date Start date
  • Tags Tags
    Explain Matlab
AI Thread Summary
The discussion revolves around the use of the 'fi' function in MATLAB, particularly regarding its limitations in handling large numbers with full precision. A user expresses frustration over the function returning an unexpected value, indicating a loss of precision when attempting to work with a large integer. The responses clarify that the 'fi' function defaults to a 16-bit word length, which can only represent a limited number of significant digits, leading to inaccuracies. It is suggested that for operations requiring higher precision, the Symbolic Toolbox should be used instead, as it can handle larger numbers without losing significance. The conversation emphasizes the importance of understanding the bit precision associated with different MATLAB functions and the potential need to switch to symbolic computation for accurate results. Additionally, examining the numbers in hexadecimal format reveals the loss of precision more clearly.
mikeph
Messages
1,229
Reaction score
18
Hi, I've been through the help files and demos but one question which I can't find the answer to is destroying my confidence with this toolbox.

If I write: a = fi(3336770033), why does it write 3336830976? I can't figure out why it's losing my number. I don't need any moving decimals, all I want to do is multiply this number a few times, and get the result with complete accuracy. 64 bits is not enough so floating point won't do.

Am I using the wrong toolbox for this purpose?

Thanks
 
Physics news on Phys.org
Hi MikeyW! :smile:

What you have is 32 bits floating point precision (about 6 significant digits).
Since the default of MATLAB is 64 bits precision, someone must have forced it down somewhere.

How is fi() defined?
Does it perhaps have a "single" precision floating point argument instead of a "double" precision argument?
 
According to the documentation, the default word size for the fixed point function fi is 16 bits.

If you want to multiply large numbers and retain full significance then you need the Symbolic Toolbox. I believe Matlab uses MuPad as the engine for its Symbolic Toolbox, which is the same as Mathcad ... I've attached a screenshot from Mathcad - is this what you want to do?
 

Attachments

  • phys - 12 06 09 symbolic multiplication 01.jpg
    phys - 12 06 09 symbolic multiplication 01.jpg
    9 KB · Views: 459
Sorry, I was not familiar with the fi() function yet.

From its description:
"fi(v) returns a signed fixed-point object with value v, 16-bit word length, and best-precision fraction length."

It seems to me that 16-bit word length implies at most 5 significant digits.
If you want more significant digits, you should not use this fi() function.

As you can see in your own screenshot, if you don't tell Matlab what to do with the representation of the numbers, it does just fine, showing as many accurate digits as you want.
 
I like Serena said:
Sorry, I was not familiar with the fi() function yet.

From its description:
"fi(v) returns a signed fixed-point object with value v, 16-bit word length, and best-precision fraction length."

It seems to me that 16-bit word length implies at most 5 significant digits.
If you want more significant digits, you should not use this fi() function.

As you can see in your own screenshot, if you don't tell Matlab what to do with the representation of the numbers, it does just fine, showing as many accurate digits as you want.
I'm not sure which message you are replying to here, but just in case its mine (because of mention of the screenshot) I just want to make clear that the screenshot is of Mathcad not Matlab. Mathcad has a version of the MuPad symbolic built into it, whereas the MuPad Symbolic Toolbox is an add-on for Matlab. Matlab normally operates at IEEE double floating-point precision giving something like 52 bits for the mantissa? ... or near enough for Government work, I think ... the relevant point being that standard Matlab will hit a precision limit pretty quickly when multiplying large (number of digits) numbers together.
 
Hmm, ok, thanks. I'm still not sure why fi(x) doesn't just give x, it's not like it can be limited by the bit size since the (incorrect) 3336830976 is the same length as my input 3336770033.

I'll give the symbolic toolbox a go, thanks.
 
MikeyW said:
Hmm, ok, thanks. I'm still not sure why fi(x) doesn't just give x, it's not like it can be limited by the bit size since the (incorrect) 3336830976 is the same length as my input 3336770033.

I'll give the symbolic toolbox a go, thanks.

Look at the two numbers in hex rather than decimal ... you should find that the 'incorrect' number has a string of zeros at the end, implying they've been lost as expected.
 
Back
Top