• 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. problem with Ceiling

Stats

  • Locked Locked
  • Replies 4
  • Subscribers 144
  • Views 15454
  • 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

problem with Ceiling

Rojalin
Rojalin over 13 years ago

 

Hi,

I am facing problem on executing ceiling function.

when i am giving B=3.0 and c=ceiling(B) it.gives correct result 3

But when i am getting B by some calculations and execute for c it gives incorrect result.

    like B=(dx-2*via_enc)/via_pitch

          c=ceiling(B)

    it gives B=3.0 and c=4.

What can be the cause of this error?

 

Thanks

  • Cancel
  • Andrew Beckett
    Andrew Beckett over 13 years ago

    This is due to floating point rounding errors. It happens in every language that uses IEEE floating point representation (in fact it happens in normal base 10 arithmetic any time you have fixed precision with fractions which are not based on powers of the prime factors of the number base. There are numerous examples of this in the forum, as it has come up many times. Search for "floating point rounding" in the Community->Community Search - for example this post.

    If you do:

    sstatus(fullPrecision t)

    and look at B, it will probably be  slightly above 3.0. Alternatively do printf("B is %.15f\n" B) and see  what it shows.

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • LeJonT
    LeJonT over 13 years ago
    When you have set B=3.0 in the first case, the value is indeed 3.0 and getting cieled to 3.0. But, when you are calculating B using some other equation, though you are seeing the value as 3.0, it might not be exactly 3.0 because, the numbers in SKILL are double precision floating point and the default printing precision is 7. You can set the full precision using sstatus(fullPrecision t) so the sstatus fullPrecision flag can be set so that by default floating point numbers are displayed with full precision rather than being output with "%.7g" format.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Rojalin
    Rojalin over 13 years ago

    Hi,

     Thanks for the reply.In that case if i want integer part and one digit after decimal point of a float number then is there any function for that?

     

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • LeJonT
    LeJonT over 13 years ago
    atof( sprintf( nil "%.1f" number ) ) I may ask what exactly is your requirement?
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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