Тестовый пример, показывающий суть явления:
#include <stdio.h>
int main()
{
float right=-2.0f, left=2.0f;
float res = (right+left)/(right-left);
printf("%5.12e\n", res);
float test = -0.00000000000000424f;
printf("%3.3f\n", test);
}
Результат:
-0.000000000000e+00
-0.000
Понятно, что после right-left знаковый бит становится 1. Но выглядит (когда выводишь на экран с %3.3f) так как будто есть где-то далеко после нулей числа, например -0.00000000000000424. А на самом деле их нет. Это ноль, только со знаком (IEEE754 это допускает). Но с математической точки зрения и при выводе матрицы нам хотелось бы видеть настоящий ноль (в математике он один) без знака. Кто-нибудь сталкивался с такой «проблемой»? Как красиво сделать в программе, чтобы ноль был единственным, без знака. Есть ли изящные решения? Просто не хочется чтобы в матрице было -0.000, это может сбить с толка того, кто будет смотреть вывод на экран или распечатку, по уже выше описанной причине.