使用带浮点数的模运算符
Posted
技术标签:
【中文标题】使用带浮点数的模运算符【英文标题】:Using modulus operator with floats 【发布时间】:2014-06-08 12:39:53 【问题描述】:有人在编程比赛中问过这个问题:-
-1%1000000009 是 -1 或 1000000008
我想知道,这可能吗? 我在我的系统中尝试过,每次都得到-1。 另外,我必须找出 10^-9 % 10^9,我使用 fmod 并得到答案 1e-009,不应该是 1 吗?
我的解释:- 10^-9/10^9 = 1/10^18 所以,答案 = 1。
请告诉我哪里错了。
【问题讨论】:
@Jongware 我正在编写一个程序,所以我需要清楚地了解程序内部发生的情况。这没有帮助。还有其他帮助吗?%
不是浮点运算符
请改进您的标题,以便问题突出
您需要区分模运算和余数运算。在 C、Java 和大多数其他语言中,它是余数并产生 -1,而 python 和某些环境具有真正的模数运算并返回 1000000008
@Jongware:嗯?不,你不会期望零。那没有任何意义。
【参考方案1】:
预览:(我将mod
称为%
)
就像在 1%3
中一样,我们做 (int) 1/3
也就是 0
,然后我们问:要添加多少才能得到 1
?
答案是 1。
所以1%3=1
。
看着10^-9 % 10^9
为了清楚起见,让我们使用另一个数字:
2^-3 % 2^3
首先我们计算偏差的整数值:
2^-3 / 2^3 = 1/(2^3 * 2^3) = 1/64
如你所见,这是一个很小的数字
所以int部分是0。
所以 - 要添加多少才能获得 2^-3
?没错:2^-3
关于您的确切问题:
我的解释:- 10^-9/10^9 = 1/10^18 所以,答案 = 1。
1/10^18
确实如此。
整数部分是什么? 零。
从零开始,我们需要添加多少才能达到-1
?
是的,-1
.
只要遵循模数的规则。
首先找到整数偏差。然后问:我们需要加多少才能得到分子。
编辑:
对于分子>分母的情况
7 % 5 = > 7 /5 => 1.4 => .4 go to hell = > you're left with 1.
但请注意。
这是 1 乘以 5。
好吧,从 1 乘以 5 - 到 7 需要多少?是的:2。
更高级:
3.111 %2 = > 3.111/2 = > 1.5555 => .555 go to hell => you're left with 1.
但那是 2 的 1 倍。
所以从 1 乘以 2 - 到 3.111 需要多少?是的 1.111
【讨论】:
这是否意味着在每种情况下,分子是浮点数而分母是整数类型并且比浮点数大得多,答案只会是浮点数(最初是分子)? @user3715736 即使分子有橙子浮点数,分母有整数苹果:你首先(!)取结果的整数部分(!)所以2.111 % 3 => 2.111/3 =>0.7033 => .7033 go to hell => you're left with 0 => so how much we need to get to 2.111 ? 2.111
%
不适用于浮点类型。你不能写3.111 % 2
@LưuVĩnhPhúc 我的整个答案都是从数学角度。我将%
称为Modulo。(我使用c#,它是有效的声明)。
在这种情况下使用 mod
这样的符号更好以上是关于使用带浮点数的模运算符的主要内容,如果未能解决你的问题,请参考以下文章