问题标签 [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.
c++ - 如何使用位移来代替整数除法?
我了解如何以 2 的幂来执行此操作,所以这不是我的问题。
例如,如果我想使用位移而不是整数除法来查找数字的 5%,我将如何计算呢?
所以我可以用 (x * 100 >> 11) 代替 (x * 20 / 19)。现在这是不对的,但它已经接近了,我通过反复试验得出了它。我将如何确定最可能使用的精确班次?
c++ - 导致除法溢出错误 (x86)
我有几个关于 x86 或 x86_64 架构上的除法溢出错误的问题。最近我一直在阅读有关整数溢出的文章。通常,当算术运算导致整数溢出时,FLAGS 寄存器中的进位位或溢出位被置位。但显然,根据这篇文章,除法运算导致的溢出不会设置溢出位,而是触发硬件异常,类似于除以零时。
现在,除法导致的整数溢出比乘法少得多。只有几种方法可以触发除法溢出。一种方法是执行以下操作:
在这种情况下,由于有符号整数的二进制补码表示,不能在有符号的 16 位整数中表示正 32768,所以除法运算溢出,导致 -32768 的错误值。
几个问题:
1)与本文所说的相反,上述并没有导致硬件异常。我正在使用运行 Linux 的 x86_64 机器,当我除以零时,程序以Floating point exception
. 但是当我导致除法溢出时,程序照常继续,默默地忽略错误的商。那么为什么这不会导致硬件异常呢?
2) 为什么硬件对除法错误的处理如此严重,而不是其他算术溢出?为什么硬件会默默地忽略乘法溢出(更容易发生意外),而除法溢出应该触发致命中断?
===========编辑===============
好的,谢谢大家的回复。我收到的回复基本上说上述 16 位整数除法不应该导致硬件故障,因为商仍然小于寄存器大小。我不明白这一点。在这种情况下,存储商的寄存器是 16 位的 - 这太小而无法存储有符号正数 32768。那么为什么不引发硬件异常呢?
好的,让我们直接在 GCC 内联汇编中执行此操作,看看会发生什么:
这只是输出一个错误的值:-32768
. 仍然没有硬件异常,即使存储商 (AX) 的寄存器太小而无法容纳商。所以我不明白为什么这里没有引发硬件故障。
python - 整数除法四舍五入
是否有一种简单的 Pythonic 方法可以在不使用浮点的情况下舍入到最接近的整数?我想做以下但使用整数算术:
===============
@John:浮点不能跨平台重现。如果您希望您的代码在不同平台上通过测试,那么您需要避免使用浮点(或在您的测试中添加一些 hacky espilon 的东西并希望它有效)。以上可能很简单,在大多数/所有平台上都是相同的,但我宁愿不做出这样的决定,因为完全避免浮点更容易。那“不符合 Python 的精神”是怎么回事?
c - 我怎样才能将除法强度减少 2^n + 1?
我需要在代码的热路径中执行一些整数除法。我已经通过分析和循环计数确定整数除法正在花费我。我希望我能做些什么来加强将师减少到更便宜的东西。
在这条路径中,我除以 2^n+1,其中 n 是可变的。本质上,我想优化此功能以删除除法运算符:
如果我除以 2^n,我只需将 div 替换为右移 n。如果我除以一个常数,我会让编译器的强度降低那个特定的除法,很可能把它变成一个乘法和一些移位。
是否有适用于 2^n+1 的类似优化?
编辑:这里的 a 可以是任意 64 位整数。n 只取 10 到 25 之间的几个值。我当然可以为每个 n 预先计算一些值,但不能为 a。
c++ - 有效地实现下限/欧几里得整数除法
下限除法是当结果总是下限(朝向 -∞),而不是朝向 0:
是否可以在 C/C++ 中有效地实现下限或欧几里得整数除法?
(显而易见的解决方案是检查股息的符号)
c - 即使 a 乘以 b 不适合这种类型,如何仅使用 32 位整数类型计算 (a 乘以 b) 除以 c
考虑以下作为参考实现:
我对不需要 64 位整数类型的实现(在 C 或伪代码中)感兴趣。
我开始草拟一个概述如下的实现:
但困难在于为 d1 和 d2 选择能够避免溢出的值 ((a / d1) * (b / d2) <= UINT32_MAX) 并最大限度地减少整个计算的错误。
有什么想法吗?
objective-c - Objective-C 整数运算
我正在尝试计算 iPhone 应用程序中的一些数字。
在此示例中,我希望 o 为 100(即毫秒),但它等于 NSLog(@"%d", o) 显示的 0。
这也等于 0。
这等于 250,000,这是直接从左到右的数学运算。
什么在我头上飞来飞去?
谢谢,
尼克
javascript - 如何在 JavaScript 中执行整数除法并分别获取余数?
在JavaScript中,我如何获得:
- 给定整数进入另一个整数的次数?
- 其余的?
c - C:以 10 为底打印一个 BigInteger
我使用这个结构来表示 128 位整数:
(除非你能指点我一个快速的 128 位整数库,否则我无法改变它)
现在我想打印一个以 10 为底的值,使用printf
. 我可能需要除以 10 才能做到这一点,但还没有实现除法。
我怎样才能做到这一点?该解决方案不必非常高效,只要它有效。
编辑:我喜欢你提出的所有解决方案。你太棒了。
c - 如何在C中划分愚蠢的大数字
正在学习 C 并认为Project Euler问题将是一种有趣且有趣的学习方式(并且会用 1 块石头杀死 2 只鸟,因为它也会让我思考数学)但我遇到了障碍。
我有(我认为是)一个很好的(如果简单的话)算法来找到一个数字的最大素数。它有效(据我测试),但 PE 问题使用 600851475143 作为最后一个问题。我曾尝试使用双精度数等,但我似乎永远找不到模数和除法运算符。任何帮助将不胜感激。
附加的代码是在我开始使用双打(或任何其他类型)之前: