问题标签 [integer-division]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
20739 浏览

c++ - 如何使用位移来代替整数除法?

我了解如何以 2 的幂来执行此操作,所以这不是我的问题。

例如,如果我想使用位移而不是整数除法来查找数字的 5%,我将如何计算呢?

所以我可以用 (x * 100 >> 11) 代替 (x * 20 / 19)。现在这是不对的,但它已经接近了,我通过反复试验得出了它。我将如何确定最可能使用的精确班次?

0 投票
7 回答
11104 浏览

c++ - 导致除法溢出错误 (x86)

我有几个关于 x86 或 x86_64 架构上的除法溢出错误的问题。最近我一直在阅读有关整数溢出的文章。通常,当算术运算导致整数溢出时,FLAGS 寄存器中的进位位或溢出位被置位。但显然,根据这篇文章,除法运算导致的溢出不会设置溢出位,而是触发硬件异常,类似于除以零时。

现在,除法导致的整数溢出比乘法少得多。只有几种方法可以触发除法溢出。一种方法是执行以下操作:

在这种情况下,由于有符号整数的二进制补码表示,不能在有符号的 16 位整数中表示正 32768,所以除法运算溢出,导致 -32768 的错误值。

几个问题:

1)与本文所说的相反,上述并没有导致硬件异常。我正在使用运行 Linux 的 x86_64 机器,当我除以零时,程序以Floating point exception. 但是当我导致除法溢出时,程序照常继续,默默地忽略错误的商。那么为什么这不会导致硬件异常呢?

2) 为什么硬件对除法错误的处理如此严重,而不是其他算术溢出?为什么硬件会默默地忽略乘法溢出(容易发生意外),而除法溢出应该触发致命中断?

===========编辑===============

好的,谢谢大家的回复。我收到的回复基本上说上述 16 位整数除法不应该导致硬件故障,因为商仍然小于寄存器大小。我不明白这一点。在这种情况下,存储商的寄存器是 16 位的 - 这太小而无法存储有符号正数 32768。那么为什么不引发硬件异常呢?

好的,让我们直接在 GCC 内联汇编中执行此操作,看看会发生什么:

这只是输出一个错误的值:-32768. 仍然没有硬件异常,即使存储商 (AX) 的寄存器太小而无法容纳商。所以我不明白为什么这里没有引发硬件故障。

0 投票
6 回答
48050 浏览

python - 整数除法四舍五入

是否有一种简单的 Pythonic 方法可以在不使用浮点的情况下舍入到最接近的整数?我想做以下但使用整数算术:

===============

@John:浮点不能跨平台重现。如果您希望您的代码在不同平台上通过测试,那么您需要避免使用浮点(或在您的测试中添加一些 hacky espilon 的东西并希望它有效)。以上可能很简单,在大多数/所有平台上都是相同的,但我宁愿不做出这样的决定,因为完全避免浮点更容易。那“不符合 Python 的精神”是怎么回事?

0 投票
2 回答
1026 浏览

c - 我怎样才能将除法强度减少 2^n + 1?

我需要在代码的热路径中执行一些整数除法。我已经通过分析和循环计数确定整数除法正在花费我。我希望我能做些什么来加强将师减少到更便宜的东西。

在这条路径中,我除以 2^n+1,其中 n 是可变的。本质上,我想优化此功能以删除除法运算符:

如果我除以 2^n,我只需将 div 替换为右移 n。如果我除以一个常数,我会让编译器的强度降低那个特定的除法,很可能把它变成一个乘法和一些移位。

是否有适用于 2^n+1 的类似优化?

编辑:这里的 a 可以是任意 64 位整数。n 只取 10 到 25 之间的几个值。我当然可以为每个 n 预先计算一些值,但不能为 a。

0 投票
6 回答
2379 浏览

c++ - 有效地实现下限/欧几里得整数除法

下限除法是当结果总是下限(朝向 -∞),而不是朝向 0:

部门类型

是否可以在 C/C++ 中有效地实现下限或欧几里得整数除法?

(显而易见的解决方案是检查股息的符号)

0 投票
7 回答
4714 浏览

c - 即使 a 乘以 b 不适合这种类型,如何仅使用 32 位整数类型计算 (a 乘以 b) 除以 c

考虑以下作为参考实现:

我对不需要 64 位整数类型的实现(在 C 或伪代码中)感兴趣。

我开始草拟一个概述如下的实现:

但困难在于为 d1 和 d2 选择能够避免溢出的值 ((a / d1) * (b / d2) <= UINT32_MAX) 并最大限度地减少整个计算的错误。

有什么想法吗?

0 投票
7 回答
21543 浏览

objective-c - Objective-C 整数运算

我正在尝试计算 iPhone 应用程序中的一些数字。

在此示例中,我希望 o 为 100(即毫秒),但它等于 NSLog(@"%d", o) 显示的 0。

这也等于 0。

这等于 250,000,这是直接从左到右的数学运算。

什么在我头上飞来飞去?

谢谢,
尼克

0 投票
18 回答
948675 浏览

javascript - 如何在 JavaScript 中执行整数除法并分别获取余数?

JavaScript中,我如何获得:

  1. 给定整数进入另一个整数的次数?
  2. 其余的?
0 投票
4 回答
2469 浏览

c - C:以 10 为底打印一个 BigInteger

我使用这个结构来表示 128 位整数:

(除非你能指点我一个快速的 128 位整数库,否则我无法改变它)

现在我想打印一个以 10 为底的值,使用printf. 我可能需要除以 10 才能做到这一点,但还没有实现除法。

我怎样才能做到这一点?该解决方案不必非常高效,只要它有效。

编辑:我喜欢你提出的所有解决方案。你太棒了。

0 投票
3 回答
2620 浏览

c - 如何在C中划分愚蠢的大数字

正在学习 C 并认为Project Euler问题将是一种有趣且有趣的学习方式(并且会用 1 块石头杀死 2 只鸟,因为它也会让我思考数学)但我遇到了障碍。

我有(我认为是)一个很好的(如果简单的话)算法来找到一个数字的最大素数。它有效(据我测试),但 PE 问题使用 600851475143 作为最后一个问题。我曾尝试使用双精度数等,但我似乎永远找不到模数和除法运算符。任何帮助将不胜感激。

附加的代码是在我开始使用双打(或任何其他类型)之前: