A riesgo de ser votado hacia abajo, es posible que desee escribir su propio método de valor absoluto, dependiendo en lo que lo estás usando. El siguiente fragmento de código (lo siento es en C#, pero se aplica el mismo principio):
short i = -32768;
int iAbs = Math.Abs(i);
estará feliz de compilar, pero cuando se ejecuta, la segunda línea arrojará una OverflowException con el mensaje útil "negando el valor mínimo de una el número del complemento de dos no es válido. " En este caso, como i es tipo abreviado, el compilador elige la sobrecarga de Math.Abs que acepta un corto y devuelve un breve, y +32768 no es un corto válido, por lo que el método arroja la excepción incluso si pensabas que estabas anticipando este problema al hacer que iAbs sea int.
Este fragmento:
short i = -32768;
int iAbs = Math.Abs((int)i);
se compilar y ejecutar sin una excepción, pero es una especie de torpe para codificar de esta manera. En mi opinión, este es un error muy furtivo porque rara vez se encuentra en el mundo real (ya que solo hay un valor para cada tipo que generará esta excepción). Desafortunadamente, encuentro este error cada vez que uso Math.Abs para normalizar los datos de audio (que generalmente es una matriz corta []), así que tengo el hábito de escribir mi propio envoltorio alrededor de Math.Abs que maneja todos esto para mí y sólo devuelve un doble:
public double AbsThatDoesntSuck(short value)
{
return Math.Abs((double)value);
}
con sobrecargas por cualquier otro tipo que necesito para manejar. Entiendo por qué Math.Abs se escribió para comportarse de esta manera, pero definitivamente puede morder las espaldas de los desconocedores.
¡Es fácil, gracias! – Cyclone
Bueno, al menos el enlace de MSDN tiene sub-enlaces que mencionan el posible problema de desbordamiento, incluso si nadie pensara hacer clic en ellos. – MusiGenesis
Por cierto, creo que se le debería otorgar un bono de reputación de 20K inmediato por su trabajo en The Daily WTF. – MusiGenesis