C 和 Lua 取模运算的异同

Saturday, May 2, 2020

C 取模

C语言的取模运算符(%)仅支持整数,定义如下:

a % b == a - ((a / b) * b)

对于 a/b , C语言会自动截断计算结果的小数部分, C99规定了"趋零截断",举个例子 2.14 会截断为 2-2.14 会截断为 -2

简单来讲,C语言取模结果的符号(正数还是负数)与 a 的符号相同

Lua 取模

Lua(当前版本为5.3)取模操作有两种 %math.fmod() ,稍微有一点区别

  • math.fmod(a, b) 相当于 C语言的 a%b ,但是支持浮点数

  • Lua的取模运算符(%)支持整数和浮点数,定义如下:

    a % b == a - ((a // b) * b)

// 在lua中称为floor除法(floor division),会将运算结果向负无穷取整(rounds the quotient towards minus infinity),举个例子 2.14 会截断为 2.0-2.14 会截断为 -3.0

需要注意的两点

  1. Lua中 a%b 的结果的符号与 b 的符号相同
  2. 对于浮点数,x - x%0.01 会保留两位小数,x - x%0.001 会保留三位小数,以此类推

参考:

luac

将windows文本文件转换为linux格式

逆波兰表达式和调度场算法