<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>S12 / MagniV Microcontrollersのトピックproblem with float conversion in CW3.1</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-with-float-conversion-in-CW3-1/m-p/130637#M1424</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I have a function which does some multiplication and division all in float. Then it casts the result from float to unsigned long.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The result in float is 225000000, which is correct. For some reason, when it gets casted into unsigned long, it becomes 224999984. Is there any way this could be solved?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Below is the code:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;float calibration = 2000;&lt;BR /&gt;unsigned int time_rate = 1;&lt;BR /&gt;unsigned int dist_rate = 2000;&lt;BR /&gt;const float TIM0_INC = 1.6e-5;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;unsigned long get_xover_pw (void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;float pw;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;pw = 3600.0 / calibration / (float)time_rate * (float)dist_rate / TIM0_INC;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;return (unsigned long)pw;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void main(void) {&lt;BR /&gt;&amp;nbsp;unsigned long y;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;y = get_xover_pw ();&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 30 Mar 2006 23:58:18 GMT</pubDate>
    <dc:creator>amyliao</dc:creator>
    <dc:date>2006-03-30T23:58:18Z</dc:date>
    <item>
      <title>problem with float conversion in CW3.1</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-with-float-conversion-in-CW3-1/m-p/130637#M1424</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I have a function which does some multiplication and division all in float. Then it casts the result from float to unsigned long.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The result in float is 225000000, which is correct. For some reason, when it gets casted into unsigned long, it becomes 224999984. Is there any way this could be solved?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Below is the code:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;float calibration = 2000;&lt;BR /&gt;unsigned int time_rate = 1;&lt;BR /&gt;unsigned int dist_rate = 2000;&lt;BR /&gt;const float TIM0_INC = 1.6e-5;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;unsigned long get_xover_pw (void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;float pw;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;pw = 3600.0 / calibration / (float)time_rate * (float)dist_rate / TIM0_INC;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;return (unsigned long)pw;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void main(void) {&lt;BR /&gt;&amp;nbsp;unsigned long y;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;y = get_xover_pw ();&lt;BR /&gt;}&lt;BR /&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 30 Mar 2006 23:58:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-with-float-conversion-in-CW3-1/m-p/130637#M1424</guid>
      <dc:creator>amyliao</dc:creator>
      <dc:date>2006-03-30T23:58:18Z</dc:date>
    </item>
    <item>
      <title>Re: problem with float conversion in CW3.1</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-with-float-conversion-in-CW3-1/m-p/130638#M1425</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;If you need the answer to be accurate to more than 6 digits, I guess you will need to use &lt;FONT face="Courier New"&gt;double&lt;/FONT&gt; rather than &lt;FONT face="Courier New"&gt;float&lt;/FONT&gt; &lt;FONT face="Arial"&gt;- assuming you have enough resources available&amp;nbsp;to do so.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Provided the range of values required for each parameter&amp;nbsp;is not too wide, you may do better using integer maths, with careful sequencing of intermediate results to ensure adequate precision without overflow.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Regards,&lt;BR /&gt;Mac&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 31 Mar 2006 02:58:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/problem-with-float-conversion-in-CW3-1/m-p/130638#M1425</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-03-31T02:58:11Z</dc:date>
    </item>
  </channel>
</rss>

