我想证明这一点:
\n\nlemma NatDivision(a: nat, b: nat)\n requires b != 0\n ensures a / b == (a as real / b as real).Floor\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道从哪里开始\xe2\x80\x94这似乎几乎是不言而喻的。
\n\n如果我知道公理是什么,我就可以从那里开始工作,但我翻遍了 Dafny 源代码,找不到除法的公理nat。(This Is Boogie 2声称 Boogie 要求您定义自己的,所以我想它们就在某个地方,也许在 C# 代码中。)
(更广泛的背景:我正在尝试使用这种方法(a + n * b) % b == a % b证明自然数的这一点。这是几乎可行的达夫尼证明。)
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) 假设您想使用Gas将 -198077031546722079779 除以 23 。由于这个股息比较大%rax,你怎么投入呢 %rdx:%rax?我读过的所有关于汇编的书都避免idiv用例子来说明,所以我迷失了。
我正在解决 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) 我在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代码示例是使用/整数除法.是//不是一个广为人知的功能吗?或者是否有理由更喜欢旧的方式?
我在分手时遇到了问题
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格式的方式吗?
谢谢
使用方案我需要使用以下功能.(所有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.
为什么是Math.ceil(15/10)1.0而不是2.0?当我跑步时,我Math.ceil((double)15/10)按预期得到2.0.
根据此链接,执行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.
在完成所有这些实验之后,我注意到直接对常量进行除法运算的结果与对变量进行除法运算的结果不同.那究竟是什么让这个与众不同呢?