function Ceil(x: real) := Convert.ToInt32(Math.Ceiling(x));
Как думаете, почему тут ещё Convert.ToInt32?
System.Convert.ToString
Нет, если вы уже боитесь побитовых операций и используете операции со строками вместо них - давайте вы лучше сохраните это число в файл, или ещё лучше на облоко, а потом будете читать назад, загружая по 1 символу и обрубая соединение?
И то что вы конвертировали в Int16 затем - это не оптимизация. Память на стеке можно считать бесконечной (пока нет излишней рекурсии). А производительность ex - 1023 будет страдать, потому что процессор не выполняет арифметические операции для чисел меньше 4 байт - а значит тут ему придётся выполнить преобразование в Int32.
Прямиком к FPU. И там обычно считается как несколько операций: exp(ln(base)*pow) - но не обязательно.
Ну там я об этом и говорил. Тот же корень типа BigInteger, как частный случай корня типа Fraction.
Без последней (пустой) строки в текстовом файле всё работает… А как считать числа из файла если она есть? И если количество чисел (через пробел) может быть различным в каждой строке…
Это как? Если вы имеете в виду денормализованной дроби - а какая разница, на .Round посмотрите. Главное получить число, содержащее M_size самых значущих бит.
.ToString использует mod 2 и div 2 (ибо как ещё получить десятичные цифры), поэтому проверять по 1 бинарной цифре будет уже эффективнее:
## var n := ReadInteger;
var c := 0;
while n<>0 do
begin
c += 1;
n := n shr 1;
end;
c.Println;
А ещё можно сделать бинарное дерево проверок. Если больше чем максимальное число, помещающееся в 16 бит - сравнивать с максимальным на 24 бита, иначе с максимальным на 8 бит.