//Феномен минус нуля
#include <iostream>
using namespace std;
void safeprint( double x)
{
if ( x== - 0 ) {
printf ( "Пытаемся напечатать -0 как 0: %lg\n " , x*- 1 ) ;
}
else {
printf ( "Обычная печать: %lg\n " , x) ;
}
}
int main( ) {
double x= 1 ;
printf ( "Работаем с числом x= %lg\n " ,x) ;
safeprint( x) ;
x= - 1 * 0.0 ;
printf ( "Работаем с числом x= %lg\n " ,x) ;
safeprint( x) ;
x= 0 ;
printf ( "Работаем с числом x= %lg\n " ,x) ;
safeprint( x) ;
printf ( "Неужели safeprint подумала, что работает с -0???\n " ) ;
if ( 0.0 == - 0.0 ) {
printf ( "А вот и причина 0.0==-0.0 истинно!\n " ) ;
}
return 0 ;
}
Ly/QpNC10L3QvtC80LXQvSDQvNC40L3Rg9GBINC90YPQu9GPCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc2FmZXByaW50KGRvdWJsZSB4KQp7CglpZih4PT0tMCkgewogICAgICAgIHByaW50Zigi0J/Ri9GC0LDQtdC80YHRjyDQvdCw0L/QtdGH0LDRgtCw0YLRjCAtMCDQutCw0LogMDogJWxnXG4iLCB4Ki0xKTsKICAgIH0KICAgIGVsc2UgewogICAgCXByaW50Zigi0J7QsdGL0YfQvdCw0Y8g0L/QtdGH0LDRgtGMOiAlbGdcbiIsIHgpOwogICAgfQp9CgppbnQgbWFpbigpIHsKCWRvdWJsZSB4PTE7CglwcmludGYoItCg0LDQsdC+0YLQsNC10Lwg0YEg0YfQuNGB0LvQvtC8IHg9ICVsZ1xuIix4KTsKCXNhZmVwcmludCh4KTsKCXg9LTEqMC4wOwoJcHJpbnRmKCLQoNCw0LHQvtGC0LDQtdC8INGBINGH0LjRgdC70L7QvCB4PSAlbGdcbiIseCk7CglzYWZlcHJpbnQoeCk7Cgl4PTA7CglwcmludGYoItCg0LDQsdC+0YLQsNC10Lwg0YEg0YfQuNGB0LvQvtC8IHg9ICVsZ1xuIix4KTsKCXNhZmVwcmludCh4KTsKCXByaW50Zigi0J3QtdGD0LbQtdC70Lggc2FmZXByaW50INC/0L7QtNGD0LzQsNC70LAsINGH0YLQviDRgNCw0LHQvtGC0LDQtdGCINGBIC0wPz8/XG4iKTsKCWlmICgwLjA9PS0wLjApIHsKCQlwcmludGYoItCQINCy0L7RgiDQuCDQv9GA0LjRh9C40L3QsCAwLjA9PS0wLjAg0LjRgdGC0LjQvdC90L4hXG4iKTsKCX0KCXJldHVybiAwOwp9