4 ms·
Yes, being able to fwrite() dump floats to binaries is invaluable when working with large datasets. It's common to see binary 'cache' file being created for ASC
by yvdriess 3y ago
Yes, being able to fwrite() dump floats to binaries is invaluable when working with large datasets. It's common to see binary 'cache' file being created for ASCII inputs (e.g. CSV) when there is any chance of it being fed repeatedly.
- pif 3y ago> fwrite() dump floats to binaries That requires a cast from float* to void*. Reading the floating point number as an integer is not necessary.
- yvdriess 3y agoAFAIK the underlying mechanism and undefined behaviour is the same.
- pif 3y agoNo, it isn't! Casting any object pointer to (and from) void* or char* is guaranteed to work, while float to integer incurs in the undefined behaviour curse.
- yvdriess 3y agoDo I understand you right that for (int i=0; i<4; i++) buf[i] = ((char*)&my_float)[i]; is not undefined behavior? But that for (int i=0; i<4; i++) buf[i] = ((char*)(int32_t*)&my_float)[i]; is undefined?
- pif 3y agoI'm not sure 100%, but your second example does not imply UB. UB is caused by the act of accessing an object via a pointer of the wrong type, but just casting a pointer as you do should not be a problem. On the other side, this would incur UB: int32_t my_int = *((int32_t*)&my_float);