Tag: logarithm

如何计算加密中的对数?

我试图在字节上执行非线性函数来实现SAFER +。 该算法需要计算基数为45的字节对数,我不明白该怎么做。 log 45 (201)= 1.39316393 当我将其分配给一个字节时,该值被截断为1,我无法恢复确切的结果。 我怎么处理这个?

记录非常大的数字

我正在处理BigInteger类,其数字大约为2,上升到10,000,000。 BigInteger Log函数现在是我算法中最昂贵的函数,我正在拼命寻找替代方案。 由于我只需要日志的组成部分,我遇到了这个答案 ,这在速度方面看起来很棒,但由于某些原因我没有得到准确的值。 我不关心小数部分,但我确实需要得到一个准确的积分部分,无论该值是浮动的还是天花板,只要我知道哪个。 这是我实现的function: public static double LogBase2 (System.Numerics.BigInteger number) { return (LogBase2(number.ToByteArray())); } public static double LogBase2 (byte [] bytes) { // Corrected based on [ronalchn’s] answer. return (System.Math.Log(bytes [bytes.Length – 1], 2) + ((bytes.Length – 1) * 8)); } 除角落情况外,这些值现在非常准确。 值7到7.99999,15到15.9999,23到23.9999 31到31.9999等返回-Infinity。 数字似乎围绕字节边界。 知道这里发生了什么吗? 例: LogBase2( 1081210289) = 30.009999999993600 != […]