标签: integer-arithmetic

为什么divMod会向下舍入而不是确保正余数?

大多数数学学生和Haskeller都熟悉的欧几里德分裂定理表明了这一点

给定两个整数a和b,其中b≠0,存在唯一的整数q和r,使得a = bq + r和0≤r<| b |.

这给出了商和余数的常规定义.这篇1992年的论文认为它们是用编程语言实现的最好的.那么,为什么divMod总是将红利转向负无穷大?

div和quot之间的确切差异表明divMod已经做了相当多的额外工作quotRem; 它似乎不太可能更难以正确.

我根据实现编写了以下欧几里德式divMod的实现GHC.Base.我很确定这是对的.

divModInt2 :: Int -> Int -> (Int, Int)
divModInt2 (I# x) (I# y) = case (x `divModInt2#` y) of
                        divModInt2# :: Int# -> Int# -> (# Int#, Int# #)

x# `divModInt2#` y#
 | (x# <# 0#) = case (x# +# 1#) `quotRemInt#` y# of
                    (# q, r #) -> if y# <# …
Run Code Online (Sandbox Code Playgroud)

haskell integer-arithmetic

11
推荐指数
1
解决办法
362
查看次数

如何在内存中存储任意大的整数值?

我必须存储一个大于long数据类型的最大值的整数值.如何在内存中存储和操作此值?

如果可能的话,请通过一个例子来说明.

c integer memory-management integer-arithmetic

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

为什么int加上uint会返回uint?

int plus unsigned int返回unsigned int.应该这样吗?

考虑以下代码:

#include <boost/static_assert.hpp>
#include <boost/typeof/typeof.hpp>
#include <boost/type_traits/is_same.hpp>

class test
{
    static const int          si = 0;
    static const unsigned int ui = 0;

    typedef BOOST_TYPEOF(si + ui) type;
    BOOST_STATIC_ASSERT( ( boost::is_same<type, int>::value ) ); // fails
};


int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ int unsigned integer-arithmetic

9
推荐指数
1
解决办法
5303
查看次数

完美的方形和完美的立方体

在c ++中是否有任何预定义的函数来检查数字是否为任何数字的平方并且对于多维数据集是否相同.

c++ algorithm math integer integer-arithmetic

8
推荐指数
2
解决办法
4万
查看次数

如何在整数运算中执行上限除法?

它基本上返回了box_needed.1个盒子可以包含10个项目.因此,如果用户键入的项目为102,则代码应返回11个框.

如果存在非零余数,是否有办法将该轮向上划分?

python rounding integer-arithmetic

8
推荐指数
2
解决办法
8900
查看次数

如何使用shift/add/sub除以9?

上周我接受了采访,有一个这样的测试:

使用SHIFT LEFT,SHIFT RIGHT,ADD,SUBSTRACT指令计算N/9(给定N为正整数) .

algorithm assembly cpu-architecture integer-arithmetic

8
推荐指数
1
解决办法
1106
查看次数

何时在Haskell中选择'Natural'而不是'Integer'?

不久前我发现了Natural数据类型base.当您打算使用非负整数类型时,它应该被视为(在我看来).但我不清楚为什么我更愿意这样NaturalInteger.两种类型都具有任意精度,两者都具有相当优化的运行时表示 - Integer表示Natural表示.但是当你减去自然数时,Natural 可以抛出纯粹的异常,这并没有真正为你的代码添加更多的类型安全.虽然Integer在所有套餐中更受欢迎.

那么何时以及为什么要使用Natural

haskell integer primitive-types integer-arithmetic

8
推荐指数
1
解决办法
283
查看次数

方程"a + bx = c + dy"的积分解

在等式中a + bx = c + dy,所有变量都是整数.a,b,c,和d是已知的.我如何找到xy?的整体解决方案?如果我想正确的,就会有解决方案无限多的,通过的最小公倍数分开bd,但我需要的是一个解决方案,我可以计算出的其余部分.这是一个例子:

a = 2
b = 3
c = 4
d = 5
a + bx: (2, 5,  8, 11, 14)
c + dy: (4, 9, 14, 19, 24)

a + bx intersects c + dy at 14, so:
x = 4
y = 2
Run Code Online (Sandbox Code Playgroud)

现在,我循环遍历整数值,x直到找到y(伪代码)的整数值:

function integral_solution(int a, int b, int …
Run Code Online (Sandbox Code Playgroud)

c++ math equation equation-solving integer-arithmetic

7
推荐指数
1
解决办法
1671
查看次数

将两个128位整数相乘

我试图在C中乘以两个128位整数.

这是我的算法:

将两个128位序列拆分为S1和S2.

然后将S1分成S11(前/上半部分)和S12(后/下半部分)并将S2分成S21(前/上半部分)和S22(后/下半部分).

将S12乘以S22 ... = S1222.

将S11乘以S21 ... = S1121,然后将其乘以2 ^ 128进行位移

将S1222和S1121组合成新阵列的前半部分和后半部分.我们称之为"Array1".新数组的长度是S1的两倍.

然后我们必须将S12乘以S21并将S11乘以S22.我将这两个相乘得到S1221和S1122(并相应地对它们进行位移).现在我必须将它们添加到Array1.这是我要求帮助的部分.我不知道如何将这些一个一个地添加到Array1.请记住,当您从Array1的3/4到Array1的1/4时,可能会有一个1的进位,因为这是需要添加S1221和S1122的跨度.

我的问题是:如何将dstM1和dstM2添加到已填充的数组d中?

c integer-arithmetic

7
推荐指数
2
解决办法
1017
查看次数

地板整数除法

在 C# 中是否有一种简单、高效和正确(即不涉及到/从 double 转换)的方法来进行地板整数除法(例如Python 提供)。

换句话说,以下的有效版本,不会遭受长/双转换损失。

(long)(Math.Floor((double) a / b))
Run Code Online (Sandbox Code Playgroud)

还是必须自己实现它,例如

static long FlooredIntDiv(long a, long b)
{
    if (a < 0)
    {
        if (b > 0)
            return (a - b + 1) / b;
        // if (a == long.MinValue && b == -1) // see *) below
        //    throw new OverflowException();
    }
    else if (a > 0)
    {
        if (b < 0)
            return (a - b - 1) / b;
    }
    return a / …
Run Code Online (Sandbox Code Playgroud)

.net c# math integer-arithmetic

7
推荐指数
1
解决办法
8062
查看次数