标签: integer-division

在Dafny中,能否证明整数/自然除法和实数除法之间的关系?

我想证明这一点:

\n\n
lemma NatDivision(a: nat, b: nat)\n  requires b != 0\n  ensures a / b == (a as real / b as real).Floor\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不知道从哪里开始\xe2\x80\x94这似乎几乎是不言而喻的。

\n\n

如果我知道公理什么,我就可以从那里开始工作,但我翻遍了 Dafny 源代码,找不到除法的公理nat。(This Is Boogie 2声称 Boogie 要求您定义自己的,所以我想它们就在某个地方,也许在 C# 代码中。)

\n\n

(更广泛的背景:我正在尝试使用这种方法(a + n * b) % b == a % b证明自然数的这一点。这是几乎可行的达夫尼证明。)

\n

integer-division dafny

2
推荐指数
1
解决办法
1780
查看次数

x87 可以对 UNsigned QUADword 整数执行精确除法吗?

8086/8087/8088 宏汇编语言参考手册 (c) 1980 Intel Corporation 提到(重点是我的):

... 8087 提供了非常好的实数系统近似值。然而,重要的是要记住,它不是精确的表示,并且实数的算术本质上是近似的。
相反,同样重要的是,8087 确实对其实数的整数子集执行精确算术。也就是说,对两个整数进行运算会返回精确的积分结果,前提是真实结果是整数并且在 range 内

最近的手册更加简洁(强调他们的):

IA 处理器...它们可以处理最多 18 位的十进制数,而不会出现舍入错误,对大至 2^64(或 10^18)的整数执行精确算术。

FPU 支持的整数数据类型包括有符号字(16 位)、有符号双字(32 位)和有符号 qword(64 位)。从来没有提到过 UNsigned。事实上,FPU 的一切都带有符号性,甚至支持带符号零(+0 和 -0)。
那么,是否可以使用 FPU 将几个无符号64 位数字相除并得到精确的商和余数?

对于几个有符号64 位数字的除法,我编写了下面的代码。商看起来不错,但余数总是返回零。为什么是这样?

; IN (edx:eax,ecx:ebx) OUT (edx:eax,ecx:ebx,CF)
FiDiv:  push    edi ecx ebx edx eax
        mov     edi, esp
        fninit
        fild    qword [edi]     ; Dividend
        fild    qword [edi+8]   ; Divisor
        fld
        fnstcw  [edi]
        or      word [edi], 0C00h ; Truncate Towards …
Run Code Online (Sandbox Code Playgroud)

x86 assembly rounding integer-division x87

2
推荐指数
1
解决办法
68
查看次数

在 64 位 Intel CPU 中执行“idiv”之前,是否将有符号整数转换为十六进制?

假设您想使用Gas将 -198077031546722079779 除以 23 。由于这个股息比较大%rax,你怎么投入呢 %rdx:%rax?我读过的所有关于汇编的书都避免idiv用例子来说明,所以我迷失了。

assembly x86-64 integer-division

2
推荐指数
1
解决办法
58
查看次数

为什么我的变量在除法时返回一个大负数?

我正在解决 cs50 的信用问题,我对一个部分的 for 循环感到困惑,因为我将一个长整数4003600000000014除以100,它返回一个大负数-1685133312

这是实际的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long int number;
    long int temp;
    do
    {
        number = get_long("Number: ");
    } while (number < 0);

    temp = number;
    int counter = 1;
    for (int i = 10; i <= number; i = 10)
    {
        number /= i;
        counter += 1;
    }
    printf("%i\n", counter);

    int product = 0;
    int divisor = 100;
    int modulo = 0;
    //printf("%li\n", (temp % 100) …
Run Code Online (Sandbox Code Playgroud)

c integer-division cs50

2
推荐指数
1
解决办法
82
查看次数

为什么Python程序员仍然使用旧式划分?

我在2001年开始使用Python.我喜欢这种语言的简单性,但是让我感到烦恼的一个功能就是/操作员,这会让我在像

def mean(seq):
    """
    Return the arithmetic mean of a list
    (unless it just happens to contain all ints)
    """
    return sum(seq) / len(seq)
Run Code Online (Sandbox Code Playgroud)

幸运的是,PEP 238已经写好了,一旦我发现了新的from __future__ import division声明,我就开始虔诚地将它添加到我写的每个.py文件中.

但在这里它是近9年后的今天,我仍然经常看到的Python代码示例使用/整数除法.是//不是一个广为人知的功能吗?或者是否有理由更喜欢旧的方式?

python integer-division

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

蟒蛇圆问题

我在分手时遇到了问题

my max_sum = 14
total_no=4  
Run Code Online (Sandbox Code Playgroud)

所以,当我这样做

print "x :", (total_sum/total_no)
Run Code Online (Sandbox Code Playgroud)

,我得到3而不是3.5

我尝试了很多方法进行打印但是失败了,有人能让我知道我用3.5格式的方式吗?

谢谢

python rounding division python-2.x integer-division

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

进行整数除法的最快方法是什么?

使用方案我需要使用以下功能.(所有args都是自然数[0,inf))

(define safe-div
  (lambda (num denom safe)
    (if (zero? denom)
        safe
        (div num denom))))
Run Code Online (Sandbox Code Playgroud)

但是,此功能经常被调用,并且表现不佳(速度快).是否有更有效的方法来实现所需的行为(num和denom的整数除法,如果denom为零则返回安全值)?

注意,我正在使用Chez Scheme,但是这个用于只导入rnrs的库,而不是完整的Chez.

performance scheme integer-division chez-scheme

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

(Java)为什么Math.ceil(15/10)是1.0而不是2.0?

为什么是Math.ceil(15/10)1.0而不是2.0?当我跑步时,我Math.ceil((double)15/10)按预期得到2.0.

java double casting integer-division

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

除以零后剩余

我知道在数学中不允许除零,但我可以使用0的模数,我应该得到什么答案?

例如

10%0 = ?
5%0 = ?
Run Code Online (Sandbox Code Playgroud)

c c++ integer-division

1
推荐指数
2
解决办法
301
查看次数

对常量和变量执行除法运算有什么区别

根据此链接,执行INT_MIN/-1除法运算将导致程序在i386 CPU中终止.我的处理器是32位架构,我使用GCC编译器.我做了以下实验来检查它.

int a = INT_MIN;
int b = -1;
int c = a / b;
printf("%d\n",c);
Run Code Online (Sandbox Code Playgroud)

根据上面提到的链接中指定的信息,该程序终止抛出浮点异常.但是当我以不同的方式尝试它时,情况就不一样了.


int c = INT_MIN / -1;
printf("%d\n",c);  
Run Code Online (Sandbox Code Playgroud)

编译此程序后,编译器发出以下警告.

iso.c:在函数'main'中:
iso.c:6:18:warning:表达式中的整数溢出[-Woverflow]
int c = INT_MIN/-1;
_____________ ^

但我得到了输出-2147483648.我再次做了两次实验.


int a = INT_MIN;
int b = -1;
printf("%d\n",a / b);
Run Code Online (Sandbox Code Playgroud)

这是一个浮点异常.


printf("%d\n",INT_MIN / -1);
Run Code Online (Sandbox Code Playgroud)

这引发了以下编译器警告.

iso.c:在函数'main'中:
iso.c:6:24:warning:表达式中的整数溢出[-Woverflow]
printf("%d \n",INT_MIN/-1);
__________________ ^

这个程序的输出再次是-2147483648.


在完成所有这些实验之后,我注意到直接对常量进行除法运算的结果与对变量进行除法运算的结果不同.那究竟是什么让这个与众不同呢?

c variables gcc constants integer-division

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