On Tue, Nov 22, 2016 at 4:55 PM, Greg KH <greg@xxxxxxxxx> wrote: > On Tue, Nov 22, 2016 at 04:44:43PM +0000, Lucas Tanure wrote: >> >> >> On Tue, Nov 22, 2016 at 4:39 PM, Greg KH <greg@xxxxxxxxx> wrote: >> >> On Tue, Nov 22, 2016 at 04:05:18PM +0000, Lucas Tanure wrote: >> > Hi, >> > >> > At some point my hardware gives me a 32bit IEEE-754 float, like this : >> > >> > >> > regmap_read(device->regmap, ADDR0, &temp); >> > >> > value = temp << 16; >> > >> > regmap_read(device->regmap, ADDR1, &temp); >> > >> > value |= temp; >> > >> > >> > So, value has a 32bit float now, and I would like to print just the >> integer >> > part, like : >> > Read 26.92387 --> Print 26. >> > Simple, no float operations. >> > >> > How I can do it ? >> >> Just print the upper 16 bits shifted right by 16 bits. >> >> >> But why would you want to print the value anyway? Who would use it? >> >> My hardware gives me the board temperature as a float 32bits. >> And the hwmon sysfs api asks me to return the temperature as millidegree >> Celsius. >> >> To follow the hwmon sysfs api rules, I need to get my float, multiply by 1000 >> and print the integer part. >> There is a better way to do that ? > > Ah, yeah, sorry, my example is wrong. There's got to be other drivers > that also do this same thing, try asking on the hwmon mailing list, they > should know how to do this best, as they are the ones responsible for > that user/kernel api. > > thanks, > > greg k-h Hi, For future reference: The best way to do it seems to be to write conversion function. Receive the float in a u32, parse it's bits and return a s32. Can be done without the use of floats. Thanks! -- Lucas Tanure _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies