c++ - 对重载函数的模糊调用 - log 与 ptrdiff_t

标签 c++ matlab type-conversion mex ambiguous

我收到了这样的代码行 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 doublefloatdouble

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

最佳答案

选择与 normed_eigval 一致的那个,因为它决定了您使用的数字精度。您会将 ptrdiff_t 整数转换为浮点值,然后取其对数。

如果您需要更快地进行,您可能可以预先计算对数的倒数。

关于c++ - 对重载函数的模糊调用 - log 与 ptrdiff_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923862/

相关文章:

python - 在 Python 中处理基本数组的首选方法是什么?

c++ - Petsc 添加矩阵值

c++ - 我的 double 正在四舍五入小数点,我不希望它这样做

c++ - Boost beast 编译错误

c++ - 使用 make 和 gcc 编译和链接来自不同目录的源代码

c++ - 使用 Matio 在 C++ 中打开 3d matlab 文件

database - 关闭 Oracle 类型转换

javascript - 使用 Javascript 将字符串转换为对象

c++ - PhysX.sln 无法编译(PhysX 3.4)

c++ - 是否可以以编程方式构造 std::initializer_list?