对重载函数的不明确调用 - 日志与ptrdiff_t

Ambiguous call to overloaded function - log vs. ptrdiff_t

本文关键字:日志 ptrdiff 调用 重载 函数 不明确      更新时间:2023-10-16

我收到了一个代码行,如下所示 entr -= normed_eigval * log(normed_eigval) / log(dim);

虽然normed_eigval源于complexArray*,但我知道dim属于ptrdiff_t型。当我尝试使用 MATLAB 和 Visual Studio 10 的 MEX 接口作为编译器编译代码时,我收到一个错误:

C2668: ambiguous call to overloaded function

告诉我log可以是long doublefloat,也可以是double

我使用的是 64 位 Windows 机器。我可以使用类型转换来解决此问题吗?如果是,我应该选择哪种类型?我认为如果要将 64 位 Windows 下size_tptrdiff_t转换为标准整数类型,可能会出现一些问题......

选择同意normed_eigval的任何一个,因为这决定了您正在使用的数字精度。您将ptrdiff_t整数转换为浮点值,然后取其对数。

如果你需要它走得更快,你可能可以预先计算对数的倒数。