所以我试图弄清楚为什么模运算符返回如此大的异常值.
如果我有代码:
double result = 1.0d % 0.1d;
它会给出一个结果0.09999999999999995.我期望值的价值0
注意使用除法运算符不存在此问题 -
double result = 1.0d / 0.1d;
将给出结果10.0,意味着剩下的应该是0.
让我明确一点:对于存在错误我并不感到惊讶,我很惊讶这个错误与游戏中的数字相比非常大.0.0999~ = 0.1和0.1处于相同数量级0.1d并且仅相差一个数量级1.0d.它不像你可以将它与double.epsilon相比,或者说"如果它的<0.00001差异则相等".
我已经在StackOverflow上阅读了这个主题,在下面的帖子中有 两 三个,其中包括.
任何人都可以建议解释为什么这个错误如此之大?任何建议,以避免将来遇到问题(我知道我可以使用十进制,但我担心它的性能).
编辑:我应该特别指出,我知道0.1是一个无限重复的二进制数字系列 - 这与它有什么关系吗?
我需要以某种方式在浮点之前得到一个数字并在该浮点之后得到值.例:
之前:21 2.12345 ;
之后:2.12345
有任何想法吗?
C# 中是否有用于 RSA 算法的 mod 运算符?我一直在使用 % ,因为我认为这可以用作 mod,但是我得到的 c 和 m 的答案不正确,所以我意识到 % 不起作用。
double e = 13;
double d; //decryption
double de = 7;
d = ((de * euiler) + 1) / e;
double message = 25;
double c = Pow(message, e) % n;
double m = Pow(c, d) % n;
Run Code Online (Sandbox Code Playgroud)