double 比较是可信的

#include <cstdio>
#include <vector>

void showBits(void* ptr, size_t size) {
    for (int i = size-1; i >= 0; --i) {
        unsigned char* byte = (unsigned char*)ptr + i;
        for (int j = 7; j >= 0; j--) {
            printf("%d", (*byte >> j) & 1);
        }
        printf(" ");
    }
    printf("\n");
}

void genDouble(double* ptr, std::vector<int> data) {
    for (int i = 7; i >= 0; --i) {
        char* byte = (char*)ptr + i;
        *byte = data[7 - i];
    }
}

int main() {
    double a = 0.0;
    genDouble(&a, {0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01});
    std::printf("%e\n", a);
    showBits(&a, 8);
    double b = 0.0;
    genDouble(&b, {0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00});
    std::printf("%e\n", b);
    showBits(&b, 8);
    std::printf("a > b %d\n", a > b);
    std::printf("a == b %d\n", a == b);
    double c = a;
    showBits(&c, 8);
    std::printf("a == c %d\n", a == c);

    return 0;
}
1.000000e+00
00111111 11110000 00000000 00000000 00000000 00000000 00000000 00000001
1.000000e+00
00111111 11110000 00000000 00000000 00000000 00000000 00000000 00000000
a > b 1
a == b 0
00111111 11110000 00000000 00000000 00000000 00000000 00000000 00000001
a == c 1
文章目录