fork(2) download
  1. //Феномен минус нуля
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void safeprint(double x)
  6. {
  7. if(x==-0) {
  8. printf("Пытаемся напечатать -0 как 0: %lg\n", x*-1);
  9. }
  10. else {
  11. printf("Обычная печать: %lg\n", x);
  12. }
  13. }
  14.  
  15. int main() {
  16. double x=1;
  17. printf("Работаем с числом x= %lg\n",x);
  18. safeprint(x);
  19. x=-1*0.0;
  20. printf("Работаем с числом x= %lg\n",x);
  21. safeprint(x);
  22. x=0;
  23. printf("Работаем с числом x= %lg\n",x);
  24. safeprint(x);
  25. printf("Неужели safeprint подумала, что работает с -0???\n");
  26. if (0.0==-0.0) {
  27. printf("А вот и причина 0.0==-0.0 истинно!\n");
  28. }
  29. return 0;
  30. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
Работаем с числом x= 1
Обычная печать: 1
Работаем с числом x= -0
Пытаемся напечатать -0 как 0: 0
Работаем с числом x= 0
Пытаемся напечатать -0 как 0: -0
Неужели safeprint подумала, что работает с -0???
А вот и причина 0.0==-0.0 истинно!