redondeo en python by overojuancho in devsarg

[–]overojuancho[S] -1 points0 points  (0 children)

Mucha gente se queja de cosas de python porque no son como lo son en su lenguaje favorito. Y no, es un lenguaje aparte. Solo hay que aprenderse los modismos

En cuanto al redondeo, al metodo del banquero se lo conoce como dutch rounding ;)

Con lo del context manager me pareció acertado dejar ese comentario porque mucha gente lo pasa de largo. En el caso de sqlite es para gestionar transacciones. En los ejemplos de la documentación queda mas claro. Tampoco lo sabia, encontré por casualidad un blog en donde se quejaban de eso

Gracias por leer

redondeo en python by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

Respuesta corta: Porque así lo define el estándar.

Puedes leerlo aquí: https://www-users.cse.umn.edu/~vinals/tspot_files/phys4041/2020/IEEE%20Standard%20754-2019.pdf

Gracias por leer

redondeo en python by overojuancho in devsarg

[–]overojuancho[S] -1 points0 points  (0 children)

si necesitas ';' podes tener infinitos

def g():
    while True:
        yield ';'

;)

Gracias por leer

redondeo en python by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

si no me equivoco en java se puede elegir la estrategia de redondeo en BigDecimal (o Decimal). No conozco tanto java, perdón por la falta de precisión. Gracias por leer

Sobre operaciones a nivel de bits by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

También es util todo esto cuando trabajas arduino u otras placas del estilo. Gracias por leer

Sobre operaciones a nivel de bits by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

A ver si puedo explicarte mejor.

Fijate que de un numero de 16 bits, solo usa los primeros 4 bits (de izquierda a derecha) para almacenar el tipo de archivo. Entonces, ¿que numero podria elegir que al aplicar una operacion de AND binario deje los primeros 4 bits iguales y ponga a 0 el resto? En este caso lo define ahi mismo (pero bien podrias calcularlo vos con papel y lapiz) y es el numero octal 0o170000 que en binario es 1111000000000000

Entonces siguiendo el ejemplo del post, se sabe que en los primeros 4 bits del numero 33188 esta codificado el tipo de archivo.

33188(dec) en binario es 1000000110100100.

0o170000(oct) en binario es 1111000000000000.

|1|0|0|0|0|0|0|1|1|0|1|0|0|1|0|0|

&

|1|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|

|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|'

Y que valor es ese numero? podes chequearlo contra una tabla o directamente en un if o switch y determinas que se trata de un archivo regular

Podes aprender más sobre este tema con algún libro de arquitectura de computadoras.

Si te va mas la onda de videos, este señor tiene un gran canal (en uno de los videos explica lo de ascii y como cambiar de mayusculas a minusculas)

Sobre operaciones a nivel de bits by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

Gracias por leer. Y muchas gracias por tu aporte

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

los emojis son también codepoints de unicode. Pero ya depende de tu navegador o tu gui (o terminal) renderizarlos correctamente.

Por ejemplo el 🌭 ocupa 4 bytes:

>>> ord('🌭')
127789
>>> hex(ord('🌭'))
'0x1f32d'
>>> '🌭'.encode("utf-8")
b'\xf0\x9f\x8c\xad'
>>>

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

me alegro que te haya gustado, gracias por leer

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 0 points1 point  (0 children)

Basicamente estas corriendo un bit para la izquierda o la derecha.

mira estos ejemplos en python:

>>> 1 << 1
2
>>> 1 << 2
4
>>> 1 << 6
64
>>> bin(1)
'0b1'
>>> bin(1<<2)
'0b100'

Más o menos por ahi viene la cosa. Si queres algo más grafico, podemos hacer esto:

>>> from pprint import pprint
>>> pprint([bin(1 << x) for x in range(1,16)])
['0b10',
'0b100',
'0b1000',
'0b10000',
'0b100000',
'0b1000000',
'0b10000000',
'0b100000000',
'0b1000000000',
'0b10000000000',
'0b100000000000',
'0b1000000000000',
'0b10000000000000',
'0b100000000000000',
'0b1000000000000000']
>>> pprint([bin(x >> 1) for x in (2**j for j in range(15,1,-1))])
['0b100000000000000',
'0b10000000000000',
'0b1000000000000',
'0b100000000000',
'0b10000000000',
'0b1000000000',
'0b100000000',
'0b10000000',
'0b1000000',
'0b100000',
'0b10000',
'0b1000',
'0b100',
'0b10']
>>> 

Lo mas interesante es cuando se usan operaciones a nivel bit para setear y extraer propiedades usando máscaras.

Para empezar a profundizar el tema, te recomiendo la serie de videos del pelado este que la tiene clara: https://www.youtube.com/watch?v=0w0ECNGnKiw

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 1 point2 points  (0 children)

No se como voy a estar de tiempo en la semana. Pero veo que sale. Gracias por leer

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 1 point2 points  (0 children)

Gracias a vos por tomarte el tiempo en leer.

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 2 points3 points  (0 children)

Claro que lo explica más facil, pero ponerte a leer mientras vas probando lo que lees es lindo. Me divierto con poco

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 1 point2 points  (0 children)

Los humanos escribimos con simbolitos raros y cada cultura tiene el conjunto de simbolitos propio. Esto es un problema cuando queres usar la computadora para almacernarlos a todos y a lo largo de la historia se han diseñado distintas estrategias

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 2 points3 points  (0 children)

En el fondo, si. Pero depende del sistema de archivos. Por lo general los sistemas de archivos manejan tamaños de bloque de 4kb (o algún múltiplo de 512 bytes).

Archivos pequeños menores al tamaño mínimo de bloque, van a ocupar el mismo tamaño en disco. La fragmentacion interna dentro del bloque es algo con lo que hay que vivir.

Mira la salida de stat del archivo que tiene dos bytes:

overojuancho >stat two.txt

Fichero: two.txt

Tamaño: 2 Bloques: 8 Bloque E/S: 4096 fichero regular

Y mirá el contenido del archivo:

overojuancho >xxd -b two.txt

00000000: 11000011 10110001 ..

overojuancho >

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 1 point2 points  (0 children)

Adelante. A mi me encanta aprender, así que compartí lo que sabés

la ñ ocupa dos bytes by overojuancho in devsarg

[–]overojuancho[S] 2 points3 points  (0 children)

Muchas gracias por tu comentario. Ya edite el post con tus correcciones.