给定以下代码(特别是使用 Embarcadero C++ Builder XE3):
int GetNDig(float fVal, float fTol) {
int tolCoeff = floor(-1 * (logf(fTol)/logf(10)));
int nDig = tolC - floor(logf(fVal)/logf(10));
if (nDig < 0) {
nDig = 0; // Limit to 0
}
return nDig;
}
void ButtonClick(...) {
float val = 12.3456789;
tol = 0.001;
int nDig = GetNDig(val,tol);
String sDig = (String)"%." + nDig + "f";
Label1->Caption = Format("Output: " + sDig,ARRAYOFCONST((val)));
}
根据https://en.cppreference.com/w/c/numeric/math/log,logf()、log() 和 logl() 基本相同,除了它们处理的浮点类型的大小与(分别为浮点数、双倍和双倍)。
在我的GetNDig()
函数中,我希望当我传入时,fTol = 0.001
我将始终计算变量tolCoeff = 3
、0.01 => 2
、0.1 => 1
等,而不管使用的味道如何logx()
。但是,我的问题是:
-1 * (log(0.001)/log(10)) => 2
-1 * (logf(0.001)/logf(10)) => 3
-1 * (logl(0.001)/logl(10)) => 2
这可能是<math.h>
特定于 C++ Builder XE3 的库问题,还是我在自己的代码中做错了什么?