¿Dónde puedo encontrar los valores máximos y mínimos que pueden almacenar varios tipos? ¿Y un valor épsilon para flotadores?
Estoy buscando algo como C's limits.h
, pero para Solidity/EVM.
Actualizado 2020
Se introdujo Solidity 0.6.8min
y max
palabras clave que ahora pueden indicarle de forma nativa el mínimo y el máximo de un tipo esperado. Desde la página de lanzamiento:
Se implementaron type(T).min y type(T).max para cada tipo entero T que devuelve el valor más pequeño y más grande representable por el tipo.
Puedes probarlo con el siguiente código. Tenga en cuenta que los uint256
valores se pueden intercambiar por cualquier tipo de entero válido:
pragma solidity ^0.6.8;
contract TestContract {
uint256 public a;
uint256 public b;
function myTest() external {
a = type(uint256).min;
b = type(uint256).max;
}
}
Supongo que te refieres a los tipos enteros, porque esos son realmente los únicos tipos en Solidity que tienen un máximo y un mínimo.
Solidity no admite tipos de punto flotante, y lo más probable es que nunca lo haga porque se considera que no son lo suficientemente precisos. Los contratos de Ethereum deben ser 100% deterministas y siempre ejecutarse de la misma manera en todo el hardware.
En el futuro, Solidity admitirá tipos de punto fijo, pero aún no.
En primer lugar, int
medios int256
y uint
medios uint256
. Una vez que sepa la cantidad de bits que tiene su número entero, puede calcular fácilmente el mínimo y el máximo usando aritmética bit a bit:
int256 constant INT256_MIN = int256(uint256(1) << 255);
int256 constant INT256_MAX = int256(~(uint256(1) << 255));
uint256 constant UINT256_MIN = 0;
uint256 constant UINT256_MAX = ~uint256(0);
Todo el cambio bit a bit se realiza en enteros sin firmar para evitar cualquier comportamiento especial en el bit de signo.
tom hale
jesús
tom hale