Embarcadero C ++ Builder可能发生log函数错误?

问题描述

给出以下代码(特别是使用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 = 30.01 => 20.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 (将#修改为@)