He estado buscando en Internet tratando de entender en su forma simplista por qué ocurre este comportamiento.¿Por qué es en vb.net si asigno un número a una sola variable? No es igual al mismo valor
Dim mysingle As Single = 456.11
Dim mybool As Boolean = mysingle = 456.11
En las líneas de arriba mybool se convierte en falso. Encontré este comportamiento al poner el single en un doble. Encontré dígitos adicionales. La documentación de .net declara que un solo es un valor apropiado: S
I gatehr one es un número de coma flotante de 32 bits? Pero ¿por qué aparecen dígitos extra cuando he dicho explícitamente cuál es el número ... seguramente la memoria debería almacenar que los números a cada lado de mi número son 0 para llenar la ubicación de la memoria?
Mi cerebro se fríe en éste :(
+1: Esto es completamente cierto: el problema es hacer comparaciones dobles/simples. Sin embargo, la razón por la cual este es un problema se debe a la precisión de coma flotante, entendiendo que hará que esta respuesta sea mucho más obvia. –
@Reed gracias, definitivamente de acuerdo con usted en ese punto. –
Es curioso que tanto vb.net como C# generalmente prohíben las asignaciones de "doble" a "único", pero permiten asignaciones en la dirección inversa así como comparaciones directas de igualdad, a pesar de que estas últimas están mucho más cargadas de peligros que las primeras. Coaccionar un doble a uno puede causar una pérdida de precisión, pero todas las operaciones numéricas pueden causar dicha pérdida, y la pérdida generalmente no será un problema, excepto cuando los números se convierten de nuevo (lo que en mi humilde opinión debería requerir un reparto). ¿Cuál sería el resultado más sorprendente: 'Dim x As Double = someInt/10.0f' or' Dim y As Single = someInt/10'? – supercat