Hi,
I've been working on an implementation of BLE Mesh's Generic Sensor model using nRF5 SDK for Mesh v5.0.0. The sensor I'm working with is a temperature and humidity sensor thus I decided to use the Precise Present Ambient Temperature and Present Ambient Relative Humidity Property IDs for this sensor.
As per Bluetooth SIG's GATT Specification Supplement v5, the representation of scalar values is determined by the formula R = C * M * 10^d * 2^b.
Also, the coefficients of Precise Present Ambient Temperature is M = 1, d = -2, b = 0, represented as a signed 16bit integer.
However, this doesn't make any sense to me. The raw value from the sensor, C, is of double-precision and under all circumstances, would be rounded to zero when calculated with such coefficients. For example, int16_t r = 25.0 * 1 * pow(10, -2) * pow(2, 0) will result in r = 0.25 in double but r = 0 in int16.
Then, I modified the coefficient d to be equal to 0 and I get 0.25 in the nRF Mesh for Android app. Modifying further, d = 2 results in a success:

It makes sense to me that precision values are multiplied by orders of magnitude to fit into an integer, but I do not get why the GATT Specification Supplement is telling us to divide by orders of magnitude. There is probably some detail I have overlooked while poring over the SDK and Bluetooth SIG's documents. Can you tell me what's with the mismatch here?
PS. Same thing applies for Present Ambient Relative Humidity.