Я проверил разницу между abs
и fabs
на питона hereКакая разница между `abs` против` fabs` в (C++)
Как я понимаю, что есть какая-то разница в отношении скорости и пройденных типов, но мой вопрос, связанный с родным C++ на VS
Относительно V.S. Я попытался следующие на Visual Studio 2013 (v120)
:
float f1= abs(-9.2); // f = 9.2
float f2= fabs(-9); // Compile error [*]
Так fabs(-9)
это даст мне ошибку компилятора, но когда я попытался сделать следующее:
double i = -9;
float f2= fabs(i); // This will work fine
То, что я понял из первого кода, который ему не будет компилироваться, потому что fabs(-9)
нужен двойной, и компилятор не смог преобразовать -9 в -9.0, но во втором коде компилятор преобразует i=-9
в i=-9.0
во время компиляции, так что fabs(i)
будет работать нормально.
Любое лучшее объяснение?
Другое дело, почему компилятор не может принять fabs(-9)
и преобразовать значение int, чтобы автоматически удвоить то, что у нас есть в C#?
[*]:
Error: more than one instance of overloaded function "fabs" matches the argument list:
function "fabs(double _X)"
function "fabs(float _X)"
function "fabs(long double _X)"
argument types are: (int)
Здесь нет ошибок компилятора: http://coliru.stacked-crooked.com/a/80c5484bda892461 – NathanOliver