ah....I think the number of significant digits for a float is 24 bits so the cast may be rounding. See: http://en.wikipedia.org/wiki/Floating_point#Rounding_modes
MS Geo Gkolfin wrote: > There are not so many steps to be made. The functionality is described > in my first mail. > > > On Fri, Aug 19, 2011 at 9:38 PM, Eric Decker <cire...@gmail.com > <mailto:cire...@gmail.com>> wrote: > > > > On Fri, Aug 19, 2011 at 11:32 AM, Geo Gkolfin <geo198...@gmail.com > <mailto:geo198...@gmail.com>> wrote: > > Thanks for your answer! > Actually it almost worked! > %lu prints 3354000128 instead of 3354000112. > %lx prints c7e9fb00 which is 3354000128 hex. > This can drive you crazy! Any ideas please? > > > Without explicitly stepping through the code and seeing what it is > doing, we would be guessing. > > > On Thu, Aug 18, 2011 at 12:58 AM, Michael Schippling > <sc...@santafe.edu <mailto:sc...@santafe.edu>> wrote: > > That is a little odd... > > I guess the implicit casting is trying to help you by > returning the largest value for the uint16 when converting > from a too-big float. When you change to uint32 you > should get 0xC7E9FAF0 in your integer (which is what > my Widows calculator shows as the correct conversion > for decimal 354000112). Then, because the top bit is > set and you asked for a signed decimal output "%ld" > you should get a negative value, but it's off by 16... > -940967168d == 0xC7E9FB00 > so I'm not sure what is going on. > > Try printing %lu or %lx and see what you get. > > MS > > Geo Gkolfin wrote: > > Hello! > > I am using telosb motes and tinyos-2.1.0. I have an > application in which some floating point operations are > done and I wish to print (using PrintfClient) only the > decimal part of the result. Since the printed value is > not what it should be -it is always 65535- I wrote a > simple program where I have: > > float y; > uint16_t x; > > y=4354.542134509; > x=y; > printf("int(4354.542134509)=%__u\n",x); > printfflush(); > > I run > java net.tinyos.tools.PrintfClient -comm > serial@/dev/ttyUSB0:telosb > > and I get the 4354! > > If I change the value stored in y to: > y=3354000112.542134509 then the printf returns 65535 > -the same value as in my application! So I guess this > is because the value does not "fit" into a uint16_t. I > change x definition to uint32_t and %u to %ld (make is > okay with that), but then the printed value is -940967168! > What is the problem? > > Thanks in advance, > Georgia > > > > ------------------------------__------------------------------__------------ > > _________________________________________________ > Tinyos-help mailing list > Tinyos-help@millennium.__berkeley.edu > <mailto:Tinyos-help@millennium.berkeley.edu> > > https://www.millennium.__berkeley.edu/cgi-bin/mailman/__listinfo/tinyos-help > > <https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help> > > > > _______________________________________________ > Tinyos-help mailing list > Tinyos-help@millennium.berkeley.edu > <mailto:Tinyos-help@millennium.berkeley.edu> > > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help > > > > > -- > Eric B. Decker > Senior (over 50 :-) Researcher > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > Tinyos-help mailing list > Tinyos-help@millennium.berkeley.edu > https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help _______________________________________________ Tinyos-help mailing list Tinyos-help@millennium.berkeley.edu https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help