Cosa restituisce sys.float_info.epsilon
?Python epsilon non è il numero più piccolo
Sul mio sistema ottengo:
>>> sys.float_info.epsilon
2.220446049250313e-16
>>> sys.float_info.epsilon/2
1.1102230246251565e-16
>>> 0 < sys.float_info.epsilon/2 < sys.float_info.epsilon
True
Come è possibile?
EDIT:
stai bene, ho pensato epsilon fa quello che fa min. Quindi in realtà intendevo dire sys.float_info.min
.
EDIT2
tutti e soprattutto John Kugelman, grazie per le vostre risposte!
Alcuni suonare in giro che ho fatto a chiarire le cose a me stesso:
>>> float.hex(sys.float_info.epsilon)
'0x1.0000000000000p-52'
>>> float.hex(sys.float_info.min)
'0x1.0000000000000p-1022'
>>> float.hex(1 + a)
'0x1.0000000000001p+0'
>>> float.fromhex('0x0.0000000000001p+0') == sys.float_info.epsilon
True
>>> float.hex(sys.float_info.epsilon * sys.float_info.min)
'0x0.0000000000001p-1022'
Così epsilon * min
dà il numero con il più piccolo significando positivo (o mantissa) e il più piccolo esponente.
Il mio esempio funziona allo stesso modo per sys.float_info.min invece di sys.float_info.epsilon ovunque. Come lo spieghi? –
Qualunque cosa più piccola di 'min' è subnormale. 'min * epsilon' è il vero float più piccolo. Se lo dividi per 2, porta a 0. –