相关疑难解决方法(0)

整数除法的行为是什么?

例如,

int result;

result = 125/100;
Run Code Online (Sandbox Code Playgroud)

要么

result = 43/100;
Run Code Online (Sandbox Code Playgroud)

结果总会成为师的底线吗?什么是定义的行为?

c math c99 integer-division c89

197
推荐指数
6
解决办法
34万
查看次数

asm.js如何处理除零?

在javascript中,使用"整数"参数除零就像浮点一样:

 1/0;    // Infinity
-1/0;    // -Infinity
 0/0;    // NaN
Run Code Online (Sandbox Code Playgroud)

asm.js规范说,返回带有整数参数的除法intish,必须立即强制转换为有符号或无符号.如果我们在javascript中执行此操作,则使用"整数"参数除零始终在coersion后返回零:

(1/0)|0;    // == 0, signed case.
(1/0) >> 0; // == 0, unsigned case.
Run Code Online (Sandbox Code Playgroud)

但是,在具有Java和C等实际整数类型的语言中,将整数除以零是一个错误,执行会以某种方式停止(例如,抛出异常,触发陷阱等).

这似乎也违反了asm.js指定的类型签名.的类型的InfinityNaNdouble/是假想(从规格):

(签名,签名)→intish∧(无符号,无符号)→intish∧(double?,double?)→double∧(float?,float?)→floatish

但是,如果其中任何一个具有零分母,结果是double,所以看起来类型只能是:

(双?,双?)→双

在asm.js代码中会发生什么?它是否遵循javascript并返回0或除零产生运行时错误?如果它遵循javascript,为什么键入错误是正确的?如果它产生运行时错误,为什么规范没有提到呢?

javascript asm.js

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

标签 统计

asm.js ×1

c ×1

c89 ×1

c99 ×1

integer-division ×1

javascript ×1

math ×1