我收到了这样的代码行
entr -= normed_eigval * log(normed_eigval)/log(dim);
虽然 normed_eigval
源自 complexArray*
,但我知道 dim
属于 ptrdiff_t
类型。当我尝试使用 MATLAB 的 MEX 接口(interface)和 Visual Studio 10 作为编译器编译代码时,我收到一个错误:
C2668: ambiguous call to overloaded function
告诉我 log
可以是 long double
、float
或 double
。
我使用的是 64 位 Windows 机器。我可以使用类型转换解决这个问题吗?如果是,我应该选择哪种类型?我认为如果 size_t
或 ptrdiff_t
要转换为标准整数类型,在 64 位 Windows 下可能会出现一些问题...
最佳答案
选择与 normed_eigval
一致的那个,因为它决定了您使用的数字精度。您会将 ptrdiff_t
整数转换为浮点值,然后取其对数。
如果您需要更快地进行,您可能可以预先计算对数的倒数。
关于c++ - 对重载函数的模糊调用 - log 与 ptrdiff_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923862/