溢出与舍入

共 18 题
#

1. 把十进制 0.1 用 IEEE 754 双精度表示,写出近似值的十六进制位模式?

A 0x3FB999999999999A ✓ 正确答案
B 0x3FC999999999999A
C 0x3FB9999999999990
D 0x3FA999999999999A
#

2. 给定浮点 1.5 与 2.5 的平均,在四种默认舍入模式下的结果是否一致?

A 结果未定义
B 四种结果不同
C 只有最近偶数给出 2.0
D 四种结果一致,均为 2.0 ✓ 正确答案
#

3. 解释 IEEE 754 中 NaN 与 Inf 的存在意义?

A Inf
B NaN ✓ 正确答案
C 0
D 未定义行为
#

4. 解释 IEEE 754 四种默认舍入模式(向最近、向下、向上、向零)的差异?

A 向下
B 向零
C 向最近偶数 ✓ 正确答案
D 向上
#

5. 解释浮点 1.0 与 -1.0 相加得到 0(正零)的位模式是什么?

A -0(0x80000000)
B +0(0x00000000) ✓ 正确答案
C NaN
D 结果未定义
#

6. 浮点下溢(underflow)与次正规数(subnormal)中,单精度最接近 0 的正规数是多少,渐进式下溢如何牺牲精度换取范围?

A 2^-23
B 2^-126
C 2^-127
D 2^-149 ✓ 正确答案
#

7. 在 SQL 中 SUM 大量 DECIMAL 列可能溢出?用何种类型与策略规避?

A 使用 INT 类型
B 将列 cast 为更高精度 DECIMAL ✓ 正确答案
C 删除多余行
D 使用 CHAR 存储
#

8. 给定有符号 char x = 127; ++x; 求 x 的十进制值与产生原因?

A 0
B 128
C -128 ✓ 正确答案
D 127
#

9. 为何 C 语言中 INT_MAX + 1 是未定义行为,而 UINT_MAX + 1 在无符号下有定义?

A 0(有定义回绕) ✓ 正确答案
B 未定义行为
C 溢出崩溃
D INT_MAX
#

10. 把 0.1 累加 100 次与单次乘以 100 比较结果,说明为何有差异?

A 累加误差更大,可能不等于 10.0 ✓ 正确答案
B 两者完全相等
C 乘法误差更大
D 取整后必然相等
#

11. 整数溢出的检测中,无符号回绕与有符号溢出的 UB 有何区别?

A 使用 __builtin_add_overflow ✓ 正确答案
B 依赖回绕后比较
C 使用模运算
D 忽略不计
#

12. 浮点舍入中,IEEE 754 的四种舍入模式与银行家舍入如何工作?

A 2.5
B 3
C 2 ✓ 正确答案
D 未定义
#

13. FMA(fused multiply-add)指令如何避免 a×b+c 的中间结果双重舍入(double rounding),对数值稳定性有何意义?

A 中间结果不单独舍入,只舍入一次 ✓ 正确答案
B 提高速度但降低精度
C 消除所有浮点误差
D 只支持整数运算
#

14. Kahan 补偿求和如何把大量小数累加的误差从随 n 增长降到近常数?以 0.1 累加 100 万次说明误差改善?

A 完全归零
B 随 n 线性增长
C 指数增长
D 近常数(补偿后) ✓ 正确答案
#

15. Java/Kotlin int 与 long 溢出在业务安全场景的检测与防护

A 直接相加
B Math.addExact ✓ 正确答案
C 使用 % 运算符
D 转换为 float
#

16. 解释有符号整数溢出与无符号整数溢出在 C 语言中的不同语义?

A 编译错误
B 未定义行为
C 有定义的模回绕 ✓ 正确答案
D 抛出异常
#

17. 浮点比较的陷阱,为什么不能用 ==,以及 EPSILON 与 ULP 比较的用法?

A 转成字符串比较
B 直接使用 ==
C 相对误差或 ULP 比较 ✓ 正确答案
D 无法比较
#

18. 整数溢出的检测与防护中,如何判断加法的溢出?

A result < a ✓ 正确答案
B b > UINT_MAX - a
C result == a
D 无法判断