In Xcode wird dies kompiliert:
%Vor%In Visual Studio 2010 wird es jedoch fehlerhaft, und ich muss max anstelle von fmax verwenden. distanceSqrd und cRadius sind beide Floats.
Es ist der einzige Teil meines Codes, der nicht nahtlos kompiliert ...
Irgendwelche Ideen warum?
Die Funktionen std::fmax
und std::fmin
aus dem <cmath>
Header (oder fmax
und fmin
von <math.h>
) sind ein C ++ 11 Feature und zusammen mit vielen anderen neuen mathematischen Funktionen ein < em> Visual Studio 2010 unterstützt noch nicht (auch nicht 2012 ). Für die Portabilität ist es ratsam, sie durch std::min
und std::max
von <algorithm>
zu ersetzen.
Der tatsächliche Unterschied ist, dass fmin
und fmax
mathematische Funktionen sind, die mit Gleitkommazahlen arbeiten und aus C99
stammen (und können intrinsisch von tatsächlichen spezialisierten CPU-Anweisungen implementiert werden, wo dies möglich ist ), während min
und max
allgemeine Algorithmen sind, die für jeden Typ verwendet werden können, der <
unterstützt (und wahrscheinlich nur ein einfaches (b<a) ? b : a
anstelle einer Fließkomma-Anweisung ist, obwohl eine Implementierung das sogar mit einer Spezialisierung von% tun könnte) co_de% und min
, aber ich bezweifle das).
Sie verhalten sich auch leicht anders für spezielle Gleitkomma-Argumente. Obwohl nicht vollständig angegeben ist, wie max
und min
auf max
s reagieren, denke ich (obwohl sie aus der obigen Definition immer den 1. Operanden zurückgeben sollten), sind NaN
und fmin
eindeutig angegeben gib immer das andere (nicht fmax
) Argument zurück, wenn eins NaN
ist, wenn die Implementierung IEEE 754 konform ist (was eine moderne PC Implementierung normalerweise ist).
Tags und Links c++ visual-studio-2010 xcode