矩阵运算的模误差

时间:2016-05-01 01:46:58

标签: c++ encryption modulo

所以我试图用确定的方法计算矩阵的逆矩阵。当我删除% 26时,我的循环没有错误,但是当我包含它时,我得到以下错误:

  

' =' :从' int'转换到了“浮动”,可能会丢失数据   非法,左操作数有类型'浮动'

如何解决这个问题的任何帮助将不胜感激。

for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++){
        if (adjacency_matrix[i][j] < 0)
            adjacency_matrix[i][j] = (adjacency_matrix[i][j] * 17) % 26;
        else
            for (float x = 0; x < 50; x++){
                if (x * -26 < adjacency_matrix[i][j])
                    adjacency_matrix[i][j] = adjacency_matrix[i][j] + x * 26;
            }
    }

1 个答案:

答案 0 :(得分:0)

模运算符%仅适用于整数。 C ++ 11(N3337)5.6 - 2(强调我的):

  

*和/的操作数应具有算术或未范围的枚举类型; %的操作数应具有整数或未范围的枚举类型对操作数执行通常的算术转换并确定结果的类型。

浮点值将转换为整数值,可能导致精度降低(丢失小数部分)。是否确实存在减少,编译器不会根据具体情况进行检查。它正确地报告说这种减少是可能的。

如果您的adjacency_matrix中只有整数,则使用多种整数类型中的一种而不是浮点数。如果你真的有真正的浮动值,那么你可以使用fmod