Я проверил разницу между abs
и fabs
на python здесь
Как я понимаю, есть некоторые различия в скорости и переданных типах, но мой вопрос связан с родным c++ на V.S.
Относительно 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 в double автоматически, как то, что у нас есть в С#?
[*]:
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)