
13/11/2018, 13:32
|
| | Fecha de Ingreso: junio-2010 Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 9 meses Puntos: 73 | |
Respuesta: Lista de números binarios c# Si el valor de pot supera al de un entero, por mucho que incrementes i nunca alcanzarás el valor de pot, ya que, cuando i llegue al entero máximo, en el próximo incremento empieza a tomar valores negativos, con lo que nunca se cumple la condición de salida del bucle.
Te pongo un ejemplo para enteros de 16 bits. Tendríamos un rango de -32768 a +32767. Si yo introduzco una longitud de 18, Math.Pow(2,18) = 262144, y mi bucle tendría que ir de 0 a 262143. Pero, al alcanzar i el valor de 32767, en el siguiente incremento la combinación de bits resultante corresponderá a un valor de i = -32768, con lo que el bucle sigue incrementando i hasta volver a llegar a +32767, y vuelta a empezar. Es decir, mi problema aparecería con longitudes superiores a 15.
Resumiendo, tal como has hecho el programa, el límite te lo da el tamaño en bits de un entero.
¿Solución? Si tienes enteros de 64 bits (no sé si C# dispone de este tipo de enteros), el problema te aparecerá con longitudes superiores a 63. Otra solución sería el empleo de librerías de precisión arbitraria, buscando en internet encontrarás unas cuantas, aunque no sé si las hay para C#.
Saludos, |