¿Por qué no se puede doblar implícitamente el doble en decimal?

No entiendo las reglas de lanzamiento cuando se trata de decimal y doble.

Es legal hacer esto

decimal dec = 10; double doub = (double) dec; 

Sin embargo, lo que me confunde es que el decimal es un tipo de datos de 16 bytes y el doble es de 8 bytes, por lo que no está convirtiendo una conversación de ampliación de doble a decimal, por lo que debe permitirse implícitamente; con el ejemplo anterior no permitido?

Si convierte de double a decimal , puede perder información: el número puede estar completamente fuera de rango, ya que el rango de un double es mucho mayor que el rango de un decimal .

Si convierte de decimal a double , puede perder información; por ejemplo, 0.1 es exactamente representable en decimal pero no en double , y decimal realmente usa muchos más bits para precisión que double does.

Las conversiones implícitas no deberían perder información (la conversión de long a double might, pero ese es un argumento diferente). Si va a perder información, debe decirle al comstackdor que es consciente de eso, a través de un lanzamiento explícito.

Es por eso que no hay conversiones implícitas de ninguna manera.

El decimal es más preciso, por lo que perdería información. Es por eso que solo puedes hacerlo explícitamente. Es para protegerlo de perder información. Ver MSDN

http://msdn.microsoft.com/en-us/library/678hzkk9%28v=VS.100%29.aspx

http://msdn.microsoft.com/en-us/library/364x0z75.aspx

Puede emitir explícitamente en ambas direcciones: de double a decimal y de decimal a double .

No puede convertir implícitamente en una u otra dirección por una muy buena razón: la conversión puede no ser sin pérdida.

Por ejemplo, el número decimal 1234567890123456789 no se puede representar exactamente como un doble. Del mismo modo, el número doble 10^32 no se puede representar exactamente como un número decimal.

Para evitar perder información involuntariamente, la conversión implícita no está permitida.