use strict; use warnings; use Inline C => Config => BUILD_NOISY => 1, USING => 'ParseRegExp', #CLEAN_AFTER_BUILD => 0, ; use Inline C => <<'EOC'; #include int foo(void) { _Decimal64 d64 = 0.DD; d64 *= -1.DD; if(d64 != 0.DD) printf("!= 0\n"); else printf("== 0\n"); if(d64 != -0.DD) printf("!= -0\n"); else printf("== -0\n"); return 0; } EOC foo(); #### != 0 == -0 #### #include int main(void) { _Decimal64 d64 = 0.DD; d64 *= -1.DD; if(d64 != 0.DD) printf("!= 0\n"); else printf("== 0\n"); if(d64 != -0.DD) printf("!= -0\n"); else printf("== -0\n"); return 0; } #### == 0 == -0 #### use strict; use warnings; use Inline C => Config => BUILD_NOISY => 1, USING => 'ParseRegExp', #CLEAN_AFTER_BUILD => 0, ; use Inline C => <<'EOC'; #include void _is_zero(_Decimal64 d64) { if(d64 != 0.DD) printf("!= 0\n"); else printf("== 0\n"); if(d64 != -0.DD) printf("!= -0\n"); else printf("== -0\n"); } int foo(void) { _Decimal64 d64 = 0.DD; d64 *= -1.DD; _is_zero(d64); return 0; } EOC foo(); #### == 0 == -0