Find the Closest Double Palindrome
C (gcc), 172 bytes
#define D double
i;D f(D x){unsigned a[]={0,0};D*A=&amp;a;D c=0;do{for(i=0;i&lt;32;++i){*a=*a&amp;~(1&lt;&lt;i)|!!(a[1]&amp;1&lt;&lt;(31-i))&lt;&lt;i;};c=fabs(x-*A)&lt;fabs(x-c)?*A:c;}while(++a[1]);return c;}

(Almost) purely brute-force; takes about 24 minutes per run on my machine.
f is a function that takes a double and returns the closest palindromic double. It iterates over every palindromic 64-bit sequence (as a double), storing the closing one, and returns it at the end.
This solution uses gcc on Ubuntu 16.04 32-bit, on a little-endian 32-bit single-core Pentium 4 2.8 GHz CPU.
Explanation/Ungolfed:
int i;
double f(double x) {
    unsigned int a[]={0, 0}; // a 2-array of ints is much easier to maipulate bitwise
    double *A = &amp;a; // than a double, so refer to the same memory
    // in two different ways, a as int[2], A as double*
    double current = 0.0;
    do {
        for(i = 0; i &lt; 32; ++i) {
            *a = ( *a&amp;~(1&lt;&lt;i) )|( (!!( (a[1]&amp;1)&lt;&lt;(31-i) ))&lt;&lt;i);
            // reverse the bits of the second half into the first half
            // (*a is shorter than a[0])
        }
        current = fabs(x-*A)&lt;fabs(x-current) ? *A : current;
        // if *A is closer to x than current, replace c with *A
    } while (++a[1]);
    // do-while instead of while to ensure each value is tried
    // at UINT32_MAX, overflows to 0, ending the loop.
    return current;
}

A C float (binary32) version that takes ~0.0015% as long to run (about 0.02 seconds on my machine) because it checks 1/65536 as many values: (185 179 bytes)
#define F float
i;F f(F x){unsigned short a[]={0,0};F*A=&amp;a;F c=0;do{for(i=0;i&lt;16;++i){*a=*a&amp;~(1&lt;&lt;i)|!!(a[1]&amp;1&lt;&lt;(15-i))&lt;&lt;i;};c=fabsf(x-*A)&lt;fabsf(x-c)?*A:c;}while(++a[1]);return c;}