标签: integer-division

在Java中使用Double类型时出错......这必须如此简单,我几乎感到羞耻,我在这里问它

好的.我一直在抨击我的头撞墙2个小时,现在试图弄清楚为什么世界double answer = 364/365;上告诉我那answer是0.或者任何其他的双重组合,它只是截断小数而我只是不知道为什么.请帮忙!!!

java double rounding division integer-division

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

整数除以 0 的余数

考虑整数除法

a = bq + r
Run Code Online (Sandbox Code Playgroud)

其中 a、b、q、r 分别为:被除数、除数、商和余数。特别是当 b = 0 时,对于给定的 a,没有唯一的 q 满足方程,因此在这种情况下商 q 应该是未定义的。

但是,在这种情况下确实存在唯一的 r,即 r = a。在商和余数总是一起定义的前提下,当 q 未定义时,r 也没有定义,但是在编程中,我们经常想使用余数运算%而不管除法/。我实际上遇到了我想要的情况if b == 0 then a else a % b end

是否有/是否有任何编程语言中的运算符,它%与除数为 0 时相同但返回被除数而不是零除法错误?

大多数(或所有)编程语言是否有任何理由为 返回零除法错误% 0

integer division integer-division divide-by-zero

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

为什么整数div和mod向零舍入?

不同于C,在Java是的结果x/yx%y良好定义的甚至为负的操作数.令人惊讶的是,它的定义是向零舍入,而不是向下舍入(即向负无穷大).有没有人利用这个定义?

在大多数情况下,我只是不在乎,但有时我不得不解决这个问题,例如,在使用modulo计算索引时array.length.

这不是咆哮,如果有这个定义的用途,我真的很感兴趣.

java integer-division

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

Haskell新手在将列表拆分为一半时出现问题

这是我尝试编写一个函数,将偶数长度列表分成两个相等的一半.

halve :: [a] -> ([a], [a])
halve x 
   | even len = (take half x, drop half x)
   | otherwise = error "Cannnot halve a list of odd length"
   where
      len = length x
      half = len / 2
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 No instance for (Fractional Int) arising from a use of ‘/’
    In the expression: len / 2
    In an equation for ‘half’: half = len / 2
    In an equation for ‘halve’:
Run Code Online (Sandbox Code Playgroud)

我不明白错误,但我怀疑Haskell需要提前告知len是你可以除以2的东西.那么,我该如何纠正这个例子呢?我的代码是否接近惯用的haskell?我很感激有关我的代码的任何其他意见.

haskell integer-division

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

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

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

assembly arm modulo integer-division arm64

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

Python 2.7 - 续分数扩展 - 理解错误

我编写了这段代码来计算使用欧几里德算法的有理数N的连续分数展开:

from __future__ import division

def contFract(N):
    while True:
        yield N//1
        f = N - (N//1)
        if f == 0:
            break
        N = 1/f
Run Code Online (Sandbox Code Playgroud)

如果说N是3.245,则函数永远不会结束,因为显然f永远不等于0.扩展的前10个术语是:

[3.0,4.0,12.0,3.0,1.0,247777268231.0,4.0,1.0,2.0,1.0]

这显然是一个错误,因为实际扩展只是:

[3; 4,12,3,1]或[3; 4,12,4]

是什么原因引起了这个问题?这是某种舍入错误吗?

python division integer-division fractions continued-fractions

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

python 3中long int division的区别

在python中进行大量分割时,我遇到了一个奇怪的情况.

int(1012337203685477580 / 2) = 506168601842738816
Run Code Online (Sandbox Code Playgroud)

int(1012337203685477580 >> 1) = 506168601842738790 
Run Code Online (Sandbox Code Playgroud)

为什么两种方法之间存在差异?int()似乎至少是int64,因为int(2 ^ 63 - 1)和2 ^ 63 - 1是相同的值.

python division integer-division python-3.x long-integer

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

在Postgres中将数字舍入到最接近的10

我正在尝试从PGExercises.com解决这个特殊问题:

https://www.pgexercises.com/questions/aggregates/rankmembers.html

问题的要点是我给了一张他们预订的俱乐部会员和半小时时间表(获得列表是两个表的简单INNER JOIN).

我应该按照预订的总时数产生一个递减的会员排名,四舍五入到最接近的10.我还需要使用RANK()窗口函数生成具有等级的列,并按等级对结果进行排序.(结果产生30条记录.)

作者非常优雅的解决方案是这样的:

select firstname, surname, hours, rank() over (order by hours) from
(select firstname, surname,
((sum(bks.slots)+5)/20)*10 as hours

from cd.bookings bks
inner join cd.members mems
    on bks.memid = mems.memid
group by mems.memid
) as subq
order by rank, surname, firstname;
Run Code Online (Sandbox Code Playgroud)

不幸的是,作为一个SQL新手,我非常不优雅的解决方案更复杂,使用CASE WHEN和转换数字到文本,以查看最后一个数字,以决定是向上舍入还是向下舍入:

SELECT
firstname,
surname,
CASE 
  WHEN (SUBSTRING(ROUND(SUM(slots*0.5),0)::text from '.{1}$') IN ('5','6','7','8','9','0')) THEN CEIL(SUM(slots*0.5) /10) * 10 
  ELSE FLOOR(SUM(slots*0.5) /10) * 10 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql integer integer-division window-functions

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

Java - 在同一步骤中获得商和余数?

似乎为了在 Java 中找到除法的商和余数,必须这样做:

int a = ...
int b = ...

int quotient = a / b;
int remainder = a % b;
Run Code Online (Sandbox Code Playgroud)

有没有办法写这个,以便在一个步骤(一个除法运算)中找到商和余数?或者 Java 是否已经自动优化了这些代码?

java integer-division

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

Numpy / Python中基本数学运算的速度:为什么整数除法最慢?

EDIT2:正如@ShadowRanger指出的那样,这是一种Numpy现象,而不是Python。但是,当在Python中使用列表推导进行计算(因此x+y变为[a+b for a,b in zip(x,y)])时,所有算术运算仍会花费同样长的时间(尽管是Numpy的100倍以上)。但是,当我在真实的仿真中使用整数除法时,它们的运行速度会更快。因此,主要问题仍然存在:即使在Python中,为什么这些测试表明整数除法没有比常规除法更快?

EDIT1:版本:Python 3.5.5,Numpy 1.15.0。

似乎在Python Numpy中,整数除法比(整数的)正规除法昂贵,这是违反直觉的。测试时,我得到以下信息:

setup_string = 'import numpy as np;\
                N=int(1e5);\
                x=np.arange(1,N+1, dtype=int);\
                y=np.arange(N, dtype=int);'
Run Code Online (Sandbox Code Playgroud)

加法(+)〜0.1s

timeit("x+y", setup=setup_string, number=int(1e3))
0.09872294100932777
Run Code Online (Sandbox Code Playgroud)

减法(-)〜0.1s

timeit("x-y", setup=setup_string, number=int(1e3))
0.09425603999989107
Run Code Online (Sandbox Code Playgroud)

乘法(*)〜0.1s

timeit("x*y", setup=setup_string, number=int(1e3))
0.09888673899695277
Run Code Online (Sandbox Code Playgroud)

除(/)〜0.35s

timeit("x/y", setup=setup_string, number=int(1e3))
0.3574664070038125
Run Code Online (Sandbox Code Playgroud)

整数除(//)〜1s(!)

timeit("x//y", setup=setup_string, number=int(1e3))
1.006298642983893
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会这样?为什么整数除法不快?

python performance numpy integer-division integer-arithmetic

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