Hi, thanks for the tip, I didn't know about using the decimal point!.
That's nice... :-)
Trying on Telosb platform on Tinyos 1.x, the float and double are both
32-bits exactly as you mentioned. On Tinyos 2.x, I found in the tutorial
that it's possible to use 64-bit variables (double and integer), but I
didn't actually try it.
About sending floats over the network, I just add the float variable in
the data structure along with the other variables, without defining a
dedicated structure for floats, this has worked perfectly for me.
Best regards,
Hussein

On Wed, 2009-02-25 at 10:39 +0100, Urs Hunkeler wrote:
> Hi,
> 
> An alternative to the casts would be to use a decimal point:
> 
> float a;
> a = (8.0-3.0)/(9.0-1.0);
> 
> It seems that on the MicaZ and TelosB platforms there is no difference 
> between float and double, both are 32-bit floating point numbers.
> 
> To send floating point numbers over the network, I use the following 
> approach:
> 
> // ----------
> 
> // in the header file
> typedef nx_struct FloatMsg {
>    nx_uint32_t number;
> } FloatMsg;
> 
> // to send data
> void sendMethod() {
>    uint32_t temp;
>    FloatMsg msg;
>    //...
>    *(float*)&temp = 1.234;
>    msg.number = temp;
>    //...
> }
> 
> // receiving data
> event /*..*/ Net.receive(message_t *msg, void *payload, uint8_t len) {
>    uint32_t temp;
>    FloatMsg* flt = (FloatMsg*)msg;
>    float number;
>    //...
>    temp = flt->number;
>    number = *(float*)&temp;
>    //...
> }
> // ----------
> 
> In Java:
> 
> // ----------
> public void messageReceived(int to, Message msg) {
>    FloatMsg flt = (FloatMsg)msg;
>    float number = Float.intBitsToFloat(flt.get_number());
>    //...
> }
> 
> public void sendNumber() {
>    FloatMsg flt = ...;
>    flt.set_number(Float.floatToIntBits(1.234f));
>    //...
> }
> // ----------
> 
> Does anybody have a better approach? Is somebody implementing something 
> like nx_float or nx_double?
> 
> Cheers,
> Urs
> 
> 
> Hussein Khaleel wrote:
> > Hi,
> > In order to assign a float value to a variable, you basically have to 
> > CAST everything that is not float in your equation. For example:
> > 
> > float a;
> > a = (8-3)/(9-1); you'll get 1 (rounded)
> > 
> > But
> > 
> > float a;
> > a = (float)(8-3)/(float)(9-1); you'll get 0.625
> > 
> > One more thing is the accuracy of the float. You'll get a maximum of 8 
> > digits in total, before and after the "point".
> > For example, if you have this value 123.45678912 you'll get 123.45679 
> > (total of 9 digits).
> > Good luck, I hope it works for you.
> > Hussein
> > 
> > Adeel Akhtar wrote:
> >> Hi All
> >>       can anybody tell me how to handle float numbers in nesc language?
> >>
> >> -- 
> >>
> >>
> >> Thanks & Best Regards
> >>
> >> Adeel Akhtar
> _______________________________________________
> Tinyos-help mailing list
> [email protected]
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to