No, no es así. Sin embargo, su expresión casi con seguridad no hace lo que usted desea.
Las expresiones 1/12 y 3/12 se realizarán utilizando número entero aritmética.
es probable que desee:
double result = a - b + 1/12d + 3/12d;
o
double result = a - b + 1/(double) 12 + 3/(double) 12;
Ambos obligará a la división que se realiza utilizando la aritmética de coma flotante.
El problema aquí es que si los dos operandos de un operador aritmético son enteros, entonces la operación se realiza utilizando la aritmética de enteros, incluso si es parte de una expresión más grande que es de tipo double
. Aquí, su expresión es efectiva:
double result = a - b + (1/12) + (3/12);
La suma y la resta está bien, porque los tipos de a
y b
obligarlos a llevar a cabo utilizando la aritmética de punto flotante - pero debido a la división "se une más estrechamente" que la suma y la resta (es decir, es como usar los corchetes anteriores) solo se consideran los operandos inmediatos.
¿Tiene sentido?
EDIT: Como es tan popular, que tiene sentido para incluir el comentario de devinb aquí también:
double result = a - b + 1.0/12.0 + 3.0/12.0;
Es todo lo mismo que lo que se refiere al compilador - sólo tiene que decidir cuál es la más clara para que:
(double) 1
1.0
1d
¿no sería más apropiado usar (doble) 1/(doble) 12 + (doble) 3/(doble) 12? Me doy cuenta de que la operación aritmética promoverá el tipo, pero me parece más claro, al menos para mí, describir explícitamente los moldes para todo. –
¿Por qué siempre es así si de repente hay una gran respuesta, es casi seguro que sea tuya? ;) – User
@Mastermind: ¿has VISTO su representante? :-) –