Regras práticas para minimizar erros de ponto flutuante em C?

Em relação à minimização do erro nas operações de ponto flutuante, se eu tiver uma operação como a seguinte em C:

float a = 123.456;
float b = 456.789;
float r = 0.12345;
a = a - (r * b);

O resultado do cálculo será alterado se eu dividir as etapas de multiplicação e subtração, ou seja:

float c = r * b;
a = a - c;

Gostaria de saber se uma CPU trataria esses cálculos de maneira diferente e, portanto, o erro pode ser menor em um caso?

Caso contrário, o que presumo, de qualquer forma, existem boas regras práticas para atenuar o erro de ponto flutuante? Posso massagear dados de uma maneira que ajude?

Por favor, não diga apenas "use maior precisão" - não é disso que estou procurando.

EDITAR

Para obter informações sobre os dados, no sentido geral, os erros parecem pior quando a operação resulta em um número muito grande como 123456789. Números pequenos, como 1,23456789, parecem produzir resultados mais precisos após as operações. Estou imaginando isso ou uma escala maior de números ajudaria a precisão?

questionAnswers(1)

yourAnswerToTheQuestion