awk: use "long long" as integer type, not "int"
Testcase: awk "BEGIN{n=(2^31)-1; print n, int(n), n%1, ++n, int(n), n%1}" 2147483647 2147483647 0 2147483648 2147483648 0 (last three values weren't showing right) function old new delta evaluate 3444 3458 +14 fmt_num 221 230 +9 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
5e87e8aebb
commit
1390a010b6
@ -190,7 +190,7 @@ typedef struct tsplitter_s {
|
|||||||
|
|
||||||
/* combined token classes */
|
/* combined token classes */
|
||||||
#define TC_BINOP (TC_BINOPX | TC_COMMA | TC_PIPE | TC_IN)
|
#define TC_BINOP (TC_BINOPX | TC_COMMA | TC_PIPE | TC_IN)
|
||||||
#define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST)
|
//#define TC_UNARYOP (TC_UOPPRE | TC_UOPPOST)
|
||||||
#define TC_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \
|
#define TC_OPERAND (TC_VARIABLE | TC_ARRAY | TC_FUNCTION \
|
||||||
| TC_BUILTIN | TC_GETLINE | TC_SEQSTART | TC_STRING | TC_NUMBER)
|
| TC_BUILTIN | TC_GETLINE | TC_SEQSTART | TC_STRING | TC_NUMBER)
|
||||||
|
|
||||||
@ -2015,8 +2015,8 @@ static int fmt_num(char *b, int size, const char *format, double n, int int_as_i
|
|||||||
char c;
|
char c;
|
||||||
const char *s = format;
|
const char *s = format;
|
||||||
|
|
||||||
if (int_as_int && n == (int)n) {
|
if (int_as_int && n == (long long)n) {
|
||||||
r = snprintf(b, size, "%d", (int)n);
|
r = snprintf(b, size, "%lld", (long long)n);
|
||||||
} else {
|
} else {
|
||||||
do { c = *s; } while (c && *++s);
|
do { c = *s; } while (c && *++s);
|
||||||
if (strchr("diouxX", c)) {
|
if (strchr("diouxX", c)) {
|
||||||
@ -2733,7 +2733,7 @@ static var *evaluate(node *op, var *res)
|
|||||||
|
|
||||||
switch (opn) {
|
switch (opn) {
|
||||||
case F_in:
|
case F_in:
|
||||||
R_d = (int)L_d;
|
R_d = (long long)L_d;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case F_rn:
|
case F_rn:
|
||||||
@ -2931,7 +2931,7 @@ static var *evaluate(node *op, var *res)
|
|||||||
case '%':
|
case '%':
|
||||||
if (R_d == 0)
|
if (R_d == 0)
|
||||||
syntax_error(EMSG_DIV_BY_ZERO);
|
syntax_error(EMSG_DIV_BY_ZERO);
|
||||||
L_d -= (int)(L_d / R_d) * R_d;
|
L_d -= (long long)(L_d / R_d) * R_d;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
debug_printf_eval("BINARY/REPLACE result:%f\n", L_d);
|
debug_printf_eval("BINARY/REPLACE result:%f\n", L_d);
|
||||||
|
Loading…
Reference in New Issue
Block a user