问题描述
给出以下代码(特别是使用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()基本相同,除了它们处理的浮点类型的大小(分别为float,double和double-double) )。
在我的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
这可能是特定于C ++ Builder XE3的<math.h>
库问题,还是我在自己的代码中做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)