Perché alcuni compilatori violano lo standard linguistico definito?
Non capisco, in ISO / IEC 10206: 1990 Standard Pascal esteso alla sezione 6.8.3.2 Operatori aritmetici, Pagina 86.
Dice questo,
A term of the form i mod j shall be an error if j is zero or negative ; otherwise, the value of i mod j shall be that value of (i-(k*j)) for integral k such that 0 < = i mod j < j.
Ma, quando provo nel compilatore gratuito pascal 3.0,
writeln(-5 mod 3);
Produce un numero negativo "-2" anziché "1" e
writeln(5 mod -3);
Dovrebbe essere un errore secondo lo standard,
ma quello che ho trovato non lo è.
Ad esempio, se c'è una domanda
"In C++, why does the -5 % 3 produce -2 instead of 1, isn't it modulo operator?"
Dovrei rispondere
That's because in C++14 standard on Page 124, 5.6 Multiplicative operators, no. 4
It says that "(a/b)*b + a%b is equal to a"
Therefore, it is not a modulo operator, it is a remainder operator
Ma se c'è una domanda,
"In Pascal, why does the -5 mod 3 produce -2 instead of 1, isn't it modulo operator?"
La risposta dovrebbe essere così?
In general, it depends on the compilers that you are using, because according to the ISO/IEC 10206:1990 Extended Pascal standard, it should be 1, while on a modern compilers like fpc or gpc,
it produces -2
Quale sarebbe la risposta più appropriata alla domanda dell'operatore modulo sopra?