I would like to store my vectors of floats in a TTree in lower precision to reduce file size. I’ve looked at Float16_t and Double32_t. However, I am not certain how mature these types are, because there is a difference between them, at least according to TTree documentation, between ROOT 6.30 and 6.36. In the former, the Float16_t is claimed to be 24 bit, in the latter 21 bit. In the former, the Double32_t is said to be 24 bits, in the latter 32 bits. Thus, I am not certain if a vector holding these values would be readable by both ROOT 6.30 and 6.36.
In addition, is there any documentation that would allow me to understand what is the difference between Float16_t and Doubel32_t?
The actual behavior of Float16_t and Double32_t has not changed in many years. Recent updates to the documentation (if I recall correctly) were ‘just’ trying to improve the qualify of the description. The main difference between Float16_t and Double32_t is simply that the former is a float in memory while the later is a double in memory. The intent is for the documentation to be attach to TBufferFile::WriteFloat16 and TBufferFile::WriteDouble32.
The default for Double32_t is indeed to store it in 32bits (8 bits for the exponent and 24 bits for the mantissa). (and the default for Float16_t is 8+13)