标签: modulo

为什么 0.5 mod 0.1 在不同的编程语言中的结果不同?

我有一个关于模数的问题。模运算求一个数除以另一个数的余数。我期待 0.5 % 0.1 = 0 的结果。但是当我在 PHP 或 .net 中运行它时,我得到 0.1。

我运行的 php 代码是:

var_dump(fmod(0.5, 0.1));
Run Code Online (Sandbox Code Playgroud)

在 .net 中,我尝试了以下结果:

Console.WriteLine(0.5%0.1);
Run Code Online (Sandbox Code Playgroud)

我还尝试了一个在线计算器http://www.calculatorpro.com/modulo-calculator/

所有这 3 种方法都给了我 0.1 作为答案。

但是当我在谷歌中输入这个时,我得到了我期望的结果http://www.google.nl/search?source=ig&hl=nl&q=0.5%20mod%200.1&meta=

这是 .net/php 中的错误还是 google 知道正确答案?谁能解释为什么会出现这些差异?

.net php modulo

5
推荐指数
1
解决办法
2007
查看次数

为什么不能直接在if语句中使用模运算的结果?

我正在做一本书的挑战,它要求我创建一个从 20 倒数到 0 的循环,并让我为每个数字打印一条消息。但是,它要求我为每个可被 5 整除的数字打印出一条特殊消息。我已经看到了某些示例,包括这个示例:

if (number%5==0)
{
    //your code here
}
Run Code Online (Sandbox Code Playgroud)

我知道模在做什么,但为什么这段代码==0后面有?例如,为什么不像这样编码:

if (number%5)
{
    //your code here
}
Run Code Online (Sandbox Code Playgroud)

c# loops if-statement modulo

5
推荐指数
1
解决办法
1679
查看次数

如何在 MIPS 中正确使用 mod 运算符?

在 MIPS 中,我对如何让 mod 工作感到困惑。下面是我到目前为止想出的代码。除了mod之外我可能还有更多错误,但我觉得这些错误是mod误解的结果。我要做的就是在此处获取工作代码(python):

i = 1
k = 0
while i < 9:
if i % 2 != 0:
    k = k + i
i += 1
print(k)
Run Code Online (Sandbox Code Playgroud)

正确转换为 MIPS。这是我第一次尝试组装,所以在下面的代码中可能有比 mod 错误更多的错误:

# Takes the odd integers from 1 to 9, adds them,
#  and spits out the result.
# main/driver starts here
    .globl main

main:

#data segment
.data

Li:     .byte 0x01  # i = 1
Lj:     .byte 0x09  # j = 9
Lk:     .byte 0x00  # k …
Run Code Online (Sandbox Code Playgroud)

python assembly mips modulo

5
推荐指数
1
解决办法
4万
查看次数

使用单个 aarch64 指令获取余数?

我正在为 ARM8 (aarch64) 编写一些汇编代码。我想做一个除法并使用获得的余数进行进一步计算。在 x86 中,当我使用 'div' 时,我知道我的剩余部分保存在RDX 中。我的问题是 - 是否有与 aarch64 指令集中的等价物?我知道 'udiv' 和 'sdiv' 做无符号和有符号的除法,并得到商数。是否有一条指令可以给我余数?(我想要 c 中的 % 模运算符)。我知道我可以使用代数获得它,只是想确认我没有错过更简单的方法。

assembly arm modulo integer-division arm64

5
推荐指数
2
解决办法
2202
查看次数

Javascript 模 (%) 表现奇怪

我正在尝试计算(6.6 % 1.1)。我预计这是 0,但我得到 1.0999999999999996。您可以在 javascript 控制台中轻松地重现这一点。我猜这是一个内部舍入错误?你如何解决这个问题?

javascript modulo

5
推荐指数
1
解决办法
1570
查看次数

带模运算符的 If 语句

我尝试过这个 -

x=[2,3,4,7,9]
count=0
for i in x:
  if i%2:
    count=count+1
print count
Run Code Online (Sandbox Code Playgroud)

为什么计数3而不是2,因为i%2仅满足“2 和 4”?

python if-statement modulo python-2.7

5
推荐指数
1
解决办法
5万
查看次数

是否有任何数字可以对浮点数进行快速模计算?

我知道对于无符号整数,如果除数是 2 的幂,我可以用位掩码替换模运算。对于浮点数,是否有任何数字具有类似的属性?也就是说,是否有任何数字n可以f mod n比一般情况更有效地计算,而不必使用位掩码?

当然,除了一个。 脑部衰竭

编辑:澄清一下,f是任何浮点数(在运行时确定), n是任何格式的任何编译时常量,我希望结果是浮点数。

c floating-point modulo fmod

5
推荐指数
2
解决办法
959
查看次数

基于模/余数计算填充的简单方法

如果我有一个长度为 L=77 的字符串,我想将其填充到 N=10 的倍数的长度。我感兴趣的是计算所需的填充量。这可以很容易地用 来完成N - (L % N),除了L % N为零的情况。

我现在一直在使用以下内容:

pad = (N - (L % N)) % N
Run Code Online (Sandbox Code Playgroud)

这看起来不是特别清晰,所以有时我使用

pad = N - (L % N)
if pad == N:
    pad = 0
Run Code Online (Sandbox Code Playgroud)

使用三行代码来完成如此简单的事情似乎有些过分了。

或者,我可以找到kfor which k * N >= L,但使用math.ceil似乎也有点矫枉过正。

我缺少更好的选择吗?也许某个地方有一个简单的功能?

python padding modulo

5
推荐指数
1
解决办法
1842
查看次数

无法解释 php 模结果

有人可以解释一下这是怎么回事吗?

-1 % 7 = 6 https://www.wolframalpha.com/input/?i=-1%257 ...但是

echo (-1 % 7)."\n";    // prints -1 WRONG
echo fmod(-1,7)."\n";  // prints -1 WRONG
Run Code Online (Sandbox Code Playgroud)

我还尝试了 php.net 中的这些示例,它们都正确返回。

echo (5 % 3)."\n";           // prints 2
echo (5 % -3)."\n";          // prints 2
echo (-5 % 3)."\n";          // prints -2
echo (-5 % -3)."\n";         // prints -2
Run Code Online (Sandbox Code Playgroud)

PHP 给了我一个我无法解释的结果 -1%7。它没有溢出 int 但我fmod还是尝试了,但我仍然遇到同样的问题(即看起来不是这个问题:php modulo 返回错误的结果

php modulo

5
推荐指数
1
解决办法
633
查看次数

C 中的高效浮点模数一(浮点数的小数部分)

我正在寻找一种非常有效的 CPU 方法来计算 C 中的浮点模数一(包括负值)。我使用它进行归一化相位缩减(包装,即 7.6 -> 0.6、0.2->0.2、-1.1 -> 0.9等等)。

据我了解,fmod() 和 Floor() 通常效率很低。我不需要严格的函数,即考虑 nan 或 inf,因为我负责传递有效值。

我一直在使用

m = x - (float)(int)x;
m += (float)(m<0.f);
// branchless form to add one if m is negative but not zero
Run Code Online (Sandbox Code Playgroud)

从基准来看,它通常比 fmod() 或使用 Floor() 代替 int 转换更有效,但我想知道是否存在更有效的方法,也许基于位操作......

我正在使用 gcc 在 64 位 intel cpu 上进行编码,但出于我的目的,我使用 32 位单精度浮点数。

如果其他地方已经解决了同样的问题,我深表歉意,但从我的搜索中我找不到任何关于这个特定主题的信息。

编辑:抱歉,我意识到最初发布的代码中有一个微妙的错误,所以我必须修复它。如果结果 (m) 为负数则必须加 1,如果 x 为负数则不必加 1

EDIT2:实际上,在 GCC 12 上使用 x-floor(x) 而不是 x-(float)(int)x 以及所有数学优化对相同函数进行基准测试后,我必须说前者更快,因为 GCC 显然足够聪明用非常高效的代码替换 Floor() 内联函数(至少在我的英特尔 i7 上是这样)。然而,对于每个 cpu 和编译器来说,情况可能并不总是如此,因为在其他情况下,根据个人经验,floor() …

c floating-point x86 fpu modulo

5
推荐指数
1
解决办法
367
查看次数