La conversión a punto flotante y viceversa parece una enorme pérdida de tiempo en el nivel de la CPU.
solución de Ian Nelson:
int pageCount = (records + recordsPerPage - 1)/recordsPerPage;
se puede simplificar a:
int pageCount = (records - 1)/recordsPerPage + 1;
AFAICS, esto no tiene el error de desbordamiento que Brandon DURETTE señaló, y debido a que sólo se utiliza una vez , no es necesario almacenar RecordPerPage especialmente si proviene de una función costosa para recuperar el valor de un archivo de configuración o algo así.
I.e. esto podría ser ineficiente, si config.fetch_value utiliza una búsqueda de base de datos o algo:
int pageCount = (records + config.fetch_value('records per page') - 1)/config.fetch_value('records per page');
Esto crea una variable que realmente no necesita, lo que probablemente tiene implicaciones (menores) de memoria y es simplemente demasiado escribiendo:
int recordsPerPage = config.fetch_value('records per page')
int pageCount = (records + recordsPerPage - 1)/recordsPerPage;
Este es toda una línea, y sólo recoge los datos una vez:
int pageCount = (records - 1)/config.fetch_value('records per page') + 1;
¿Emite más? y/x + 1 funciona muy bien (siempre que sepa que el operador/siempre se redondea hacia abajo). – rikkit
@rikkit - si yy son iguales, y/x + 1 es uno demasiado alto. –
Para cualquiera que lo encuentre ahora, [esta respuesta a una pregunta de dupe] (http://stackoverflow.com/a/4846569/4163002) evita la conversión innecesaria a double * y * evita preocupaciones de desbordamiento además de proporcionar una explicación clara. – ZX9