• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » Development Tools » Code Composer Studio » Code Composer Forum » Using modf( float, float* ) in cmath results in infinite loop
Share
Code Composer Studio
  • Forum
  • Announcements
Options
  • Subscribe via RSS
Common Questions
  • Code Composer Studio Forum Usage Guidelines

  • Resources
  • Code Composer Studio (CCStudio) Product Folder
  • Troubleshooting CCS
  • CCS Wiki
  • Download CCS
  • Order CCS
  • Tools Insider Blog
  • Bug Tracking
  • Forums

    Using modf( float, float* ) in cmath results in infinite loop

    This question is answered
    Michael DiGiovanni
    Posted by Michael DiGiovanni
    on Apr 19 2012 14:20 PM
    Prodigy20 points

    I'm compiling code for the F28335 using CCS5 and the 6.0.3 compiler.  When I #include <cmath> and call modf( float, float* ) I get an infinite loop.  Checking the assembly, it appears the modf( float, float* ) function calls itself in an infinite loop.  I've worked around this issue for now by using the double version of the function, but this needs to be fixed.  Here's the generated assembly of the loop:

    ;***************************************************************
    ;* FNAME: _modf__3stdFfPf FR SIZE: 0 *
    ;* *
    ;* FUNCTION ENVIRONMENT *
    ;* *
    ;* FUNCTION PROPERTIES *
    ;* 0 Parameter, 0 Auto, 0 SOE *
    ;***************************************************************

    _modf__3stdFfPf:
    ;*** ----------------------- #pragma LOOP_FLAGS(4096u)
    $C$L10:
    ;*** -----------------------g2:
    ;*** 198 ----------------------- return modf(x, y);
    ;*** ; tail recursive call occurs here
    ;*** 198 ----------------------- goto g2;
    BF $C$L10,UNC ; [CPU_] |198|
    ; branch occurs ; [] |198|
    c2000 bug cmath
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    All Replies
    • Archaeologist
      Posted by Archaeologist
      on Apr 19 2012 14:44 PM
      Mastermind40800 points

      C2000 compiler version 6.0.3 hasn't been released yet; are you sure that's the exact version number?  Are there any letters or digits after 6.0.3?

      modf is the double version; modff is the float version.

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • Michael DiGiovanni
      Posted by Michael DiGiovanni
      on Apr 19 2012 14:53 PM
      Prodigy20 points

      Sorry, I meant 6.0.2.   In the C style math.h, modf is the double version and modff is the float version.  In the C++ style cmath, modf is overloaded to use float or double.

      If I go to the declaration of mof( float, float* ), it takes me to the following lines of code in cpp_inline_math.h:

      inline float modf(float x, float *y)
      { // unpack fraction
      return (float)(modff((float)x, (float *)y));
      }
      
      
      If I then go to the declaration of modff, it takes me to this line of code, also in cpp_inline_math.h:
      #define modff   modf
      
      
      So the floating point version of modf is calling moff with floats which is defined as modf.  That's an infinite loop.
      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    • Archaeologist
      Posted by Archaeologist
      on Apr 19 2012 15:10 PM
      Verified Answer
      Verified by Ki-Soo Lee
      Mastermind40800 points

      Okay thanks.  This is now SDSCM00043847

      Report Abuse
      • Reply
      You have posted to a forum that requires a moderator to approve posts before they are publicly available.
    TI E2E™ Community
    • Support Forums
    • Blogs
    • Videos
    • Groups
    • Site Support & Feedback
    • Settings
    TI E2E™ Community Groups
    • TI University Program
    • Make the Switch
    • Microcontroller Projects
    • Motor Drive & Control
    Other Communities
    • Deyisupport
    • Designsomething.org
    • beagleboard.org
    • TI on Element 14
    • TI on TechXchangeSM
    Other Technical & Support Resources
    • WEBENCH® Design Center
    • Product Information Centers
    • Technical Documents
    • TI Design Network
    • TI Technical Articles
    • TI Training

    All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

    Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

    Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
    TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

    TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
    embedded processors, along with software, tools and the industry’s largest sales/support staff.

    © Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
    Trademarks | Privacy Policy | Terms of Use