• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Custom IC SKILL
  3. SKILL arithmetic comparisons

Stats

  • Locked Locked
  • Replies 3
  • Subscribers 143
  • Views 15781
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

SKILL arithmetic comparisons

sri125
sri125 over 15 years ago

 SKILL is notorious for the way it stores numbers in memory. e.g variable w, which

should be 0.4 gets stored as 0.3999999999999 or something like that.

 

So when you use it in 'if-else' loop like:

if( w == 0.4 then 

    block good;

else

   block bad;

 )

 

You will end up in block bad unless you do something like

 

abs( w - 0.4 ) < 0.000001 

or something like above.

 

Is there an elegant way to handle this in SKILL ?

 

thanks

 

 

 

  • Cancel
Parents
  • skillUser
    skillUser over 15 years ago

    There is nothing "notorious" or special with the way that SKILL stores floating point numbers compared to other programming languages.  A floating point number is typically stored in an IEEE (754) format which is comprised of a sign, an exponent and a mantissa (or significand).  Most decimal numbers do not have an exact representation in the binary floating-point storage format used in single-precision and double-precision data types.  So in order to be able to test for equality in a reliable fashion, the best thing is to subtract one number from the other and test the remainder against a small number, exactly as you have shown.  The small number could be a fraction of the input number so that the test works equally well for large values and smaller values.

    Sorry, that's just how things are for floating point number comparison, I'm not sure if there is any better way?

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • skillUser
    skillUser over 15 years ago

    There is nothing "notorious" or special with the way that SKILL stores floating point numbers compared to other programming languages.  A floating point number is typically stored in an IEEE (754) format which is comprised of a sign, an exponent and a mantissa (or significand).  Most decimal numbers do not have an exact representation in the binary floating-point storage format used in single-precision and double-precision data types.  So in order to be able to test for equality in a reliable fashion, the best thing is to subtract one number from the other and test the remainder against a small number, exactly as you have shown.  The small number could be a fraction of the input number so that the test works equally well for large values and smaller values.

    Sorry, that's just how things are for floating point number comparison, I'm not sure if there is any better way?

    Regards,

    Lawrence.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information