#include <stdio.h>
#include <stdint.h>
#include <string.h>
#define LONG_DBL_BYTES (80 / 8)
static void dump( void * data, size_t length)
{
for ( size_t i = 0 ; i < length; i++ ) {
printf ( "%.2x " , ( ( uint8_t * ) data
) [ i
] ) ; }
}
int main( void ) {
long double number = 1.0 ;
printf ( "sizeof(long double) = %zu (%zu padding bytes)\n " , sizeof ( long double ) , sizeof ( long double ) - LONG_DBL_BYTES) ;
printf ( "Unmodified representation of %Lf:\n " , number
) ; dump( & number, sizeof ( number) ) ;
// Patch unused (padding) bytes.
memset ( ( ( uint8_t * ) & number
) + LONG_DBL_BYTES
, 0xaa , sizeof ( long double ) - LONG_DBL_BYTES) ;
printf ( "After patching unused (padding) bytes of %Lf with 0xaa:\n " , number) ;
dump( & number, sizeof ( number) ) ;
number += 2.0 ;
printf ( "Unused bytes are not touched when doing math on %Lf:\n " , number) ;
dump( & number, sizeof ( number) ) ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKI2RlZmluZSBMT05HX0RCTF9CWVRFUyAoODAgLyA4KQoKc3RhdGljIHZvaWQgZHVtcCh2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQp7CiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgcHJpbnRmKCIlLjJ4ICIsICgodWludDhfdCAqKSBkYXRhKVtpXSk7CiAgICB9CiAgICBwdXRjaGFyKCdcbicpOwp9CgppbnQgbWFpbih2b2lkKSB7CiAgICBsb25nIGRvdWJsZSBudW1iZXIgPSAxLjA7CiAgICAKICAgIHByaW50Zigic2l6ZW9mKGxvbmcgZG91YmxlKSA9ICV6dSAoJXp1IHBhZGRpbmcgYnl0ZXMpXG4iLAogICAgICAgIHNpemVvZihsb25nIGRvdWJsZSksIHNpemVvZihsb25nIGRvdWJsZSkgLSBMT05HX0RCTF9CWVRFUyk7CiAgICAKICAgIHByaW50ZigiVW5tb2RpZmllZCByZXByZXNlbnRhdGlvbiBvZiAlTGY6XG4iLCBudW1iZXIpOwogICAgZHVtcCgmbnVtYmVyLCBzaXplb2YobnVtYmVyKSk7CiAgICAKICAgIC8vIFBhdGNoIHVudXNlZCAocGFkZGluZykgYnl0ZXMuCiAgICBtZW1zZXQoKCh1aW50OF90ICopICZudW1iZXIpICsgTE9OR19EQkxfQllURVMsIDB4YWEsCiAgICAgICAgc2l6ZW9mKGxvbmcgZG91YmxlKSAtIExPTkdfREJMX0JZVEVTKTsKICAgIAogICAgcHJpbnRmKCJBZnRlciBwYXRjaGluZyB1bnVzZWQgKHBhZGRpbmcpIGJ5dGVzIG9mICVMZiB3aXRoIDB4YWE6XG4iLAogICAgICAgIG51bWJlcik7CiAgICBkdW1wKCZudW1iZXIsIHNpemVvZihudW1iZXIpKTsKCiAgICBudW1iZXIgKz0gMi4wOwogICAgCiAgICBwcmludGYoIlVudXNlZCBieXRlcyBhcmUgbm90IHRvdWNoZWQgd2hlbiBkb2luZyBtYXRoIG9uICVMZjpcbiIsCiAgICAgICAgbnVtYmVyKTsKICAgIGR1bXAoJm51bWJlciwgc2l6ZW9mKG51bWJlcikpOwp9Cg==