模数运算如何处理浮点数据类型

本文关键字:处理 数据类型 运算 何处理 | 更新日期: 2024-10-30 22:34:54

我试图找出对浮点数据类型的简单模运算。

float a=3.14f;
float b=10f;
result=a%b;

我得到的结果= 3.14

另一个使用十进制数据类型的示例:

decimal p=10;
decimal q=40;
result=p%q;

得到答案=20。

我不明白模量是如何工作的?

模数运算如何处理浮点数据类型

来自浮点余数的 C# 语言规范。 在x % y的情况下,如果xy是正有限值。

zx % y的结果,计算为x – n * y,其中n 是小于或等于 x / y 的最大可能整数。

C# 语言规范还清楚地概述了如何处理非零有限值、零、无穷大和 NaN 的所有可能组合的情况,这些组合可能发生在 x % y 的浮点值中。

                          y value
                | +y  –y  +0  –0  +∞  –∞  NaN
           -----+----------------------------  
  x         +x  | +z  +z  NaN NaN x   x   NaN
            –x  | –z  –z  NaN NaN –x  –x  NaN
  v         +0  | +0  +0  NaN NaN +0  +0  NaN
  a         –0  | –0  –0  NaN NaN –0  –0  NaN
  l         +∞  | NaN NaN NaN NaN NaN NaN NaN
  u         –∞  | NaN NaN NaN NaN NaN NaN NaN
  e         NaN | NaN NaN NaN NaN NaN NaN NaN

这篇关于 msdn 的文章有足够的例子,但我可以快速解释它;

http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx

如果你这样做int result = x % y;你会发现你返回了x % y的其余部分,并且这些值更像是整数。例如,链接中的第三行是打印.6 Console.WriteLine(5.0 % 2.2);。这是因为它发现 2.2 可以进入 5.0 不超过两次。所以它做 5 - 2.2(2) 即 .6