本文整理汇总了C++中Float::pow_si方法的典型用法代码示例。如果您正苦于以下问题:C++ Float::pow_si方法的具体用法?C++ Float::pow_si怎么用?C++ Float::pow_si使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Float
的用法示例。
在下文中一共展示了Float::pow_si方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: coords_d
/**
@brief Compute the norm of a dual vector (specified by coefficients in the dual basis).
@param A input lattice
@param b coefficients of shortest dual vector
@return
*/
template <class ZT> int dual_length(Float &norm, ZZ_mat<ZT> &A, const IntVect &coords)
{
int d = coords.size();
if (A.get_rows() != d)
{
cerr << "DSVP length error: Coefficient vector has wrong dimension: ";
cerr << A.get_rows() << " vs " << d << endl;
return 1;
}
FloatVect coords_d(d);
for (int i = 0; i < d; i++)
{
coords_d[i] = coords[i].get_d();
}
IntMatrix empty_mat;
MatGSO<Integer, Float> gso(A, empty_mat, empty_mat, GSO_INT_GRAM);
if (!gso.update_gso())
{
cerr << "GSO Failure." << endl;
return 1;
}
Float tmp;
gso.get_r(tmp, d - 1, d - 1);
tmp.pow_si(tmp, -1);
FloatVect alpha(d);
Float mu, alpha2, r_inv;
norm = 0.0;
for (int i = 0; i < d; i++)
{
alpha[i] = coords_d[i];
for (int j = 0; j < i; j++)
{
gso.get_mu(mu, i, j);
alpha[i] -= mu * alpha[j];
}
gso.get_r(r_inv, i, i);
r_inv.pow_si(r_inv, -1);
alpha2.pow_si(alpha[i], 2);
norm += alpha2 * r_inv;
}
return 0;
}