Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Can someone briefly explain fixed-point? MATLAB

  1. Jun 9, 2012 #1
    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?

  2. jcsd
  3. Jun 9, 2012 #2

    I like Serena

    User Avatar
    Homework Helper

    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?
  4. Jun 9, 2012 #3
    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?

    Attached Files:

  5. Jun 9, 2012 #4

    I like Serena

    User Avatar
    Homework Helper

    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.
  6. Jun 10, 2012 #5
    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.
  7. Jun 11, 2012 #6
    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.
  8. Jun 11, 2012 #7
    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.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook