При переходе на float потеря точности произойдет!
Да, float тоже тип с плавающей точкой.
Не понятно
Выбирайте любые 2 значит, что для 2 из 3 требований решение найти можно. Для всех 3 - едва ли.
Выбираем 1 и 2, отказываемся от 3.Т.е. отказываемся от типов с плавающей точкой (float, real, double...) и используем (или пишем сами) библиотеку для работы с числами произвольной точности.
http://ru.wikipedia.org/wiki/%D0%94%D0%BB%D0%B8%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%B0Выбираем 1 и 3, отказываемся от 2.Надо думать в каком порядке производить действия.
Например для
const double max = 673271033142181888.000000;
const double left = -976.233463;
const double min = -673271033142181888.000000;
const double right = max + min - left;
А для
const double max = 976.233463;
const double left = 673271033142181888.000000;
const double min = -673271033142181888.000000;
const double right = max - (left - min);
Выбираем 2 и 3, отказываемся от 1.Самый простой вариант.
Соглашаемся на потерю точности. Ну 1024 вместо 976.233463 и 1024.