double s;float *p;...s += (double)(*p) * (double)(*p);Under some circumstances the multiplication compiles to a _single_ precision operator, MULSS. This can lead to overflows, the avoidance of which is the objective of the cast. From my understanding of /fp:fast, this does not fall within the imprecision latitude that's intended.Assignment to a temporary double solves the problem in this instance.
Visual Studio/Team Foundation Server/.NET Framework Tooling version
Steps to reproduce
Operating System Language