Помощь новичкам

Сeil без исключений

Вы бы для начала посмотрели на реализацию Ceil:

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.

Прокомментируйте, пожалуйста.

  var n:integer;
begin
  assign(input, '5.txt');  
  while not eof(input) do 
    read(n);    
//    readln(n); // так работает    
end.    

5.txt (16 Байт)

Снимок2

Без последней (пустой) строки в текстовом файле всё работает… А как считать числа из файла если она есть? И если количество чисел (через пробел) может быть различным в каждой строке…

Просто while not Eof do

Количество чисел в строке может быть любым.

Паскаль не позволяет читать числовые данные из пустых строк.

Попробуйте запустить такой код ## var n := ReadInteger; и понажимайте Enter…

А как readln читает?

После него чтение возможно только принудительно со следующей строки. Это для чтения char и string надо.

Спасибо.

рискну предположить, что надо использовать SeekEof

Большое спасибо.

Да. Так работает:

var
  n: integer;

begin
  Assign(input, '5.txt'); 
  while not SeekEof do 
    Read(n);
end.

Как получить мантиссу денормализованного числа тут?

Это как? Если вы имеете в виду денормализованной дроби - а какая разница, на .Round посмотрите. Главное получить число, содержащее M_size самых значущих бит.

Как понять, сколько бит занимает большое целое a любого типа (не обязательно BigInteger) без пресловутой

, например, System.Convert.ToString(a, 2).Length и минуя проблему: пусть a = 2^n, n >= 48, тогда Log2(a) = Log2(a - 1)?

.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 бит.


И, как обычно, что вам даст кол-во двоичных цифр?

Как можно в PascalABC.NET коротко записать решение данной задачки:

x in range(1,100)

(x<a) and …

Почему не range(1,a)? По моему ваше решение неправильное, для a>100.

##
for var a := 1 to 1000 do
  if (1..a).Cartesian(2).All(\(x,y)->x*y<=1200) then
    a.Print;

P.S. Хотя вообще, если уж отражать условие в коде - то так:

## SeqWhile(1, a->a+1, a->not (1..a).Cartesian(2).Any(\(x,y)->x*y>1200) ).Last.Print;
(1..a-1).Cartesian(2)

может до а-1 и что делает обратный слеш?

SeqWhile(2, a->a+1, a->not (1..a-1).Cartesian(2).Any(\(x,y)->x*y>1200)).Last.Print;

Ну да, a-1.
А про обратный слэш - посмотрите на тип параметра лямбды в данном случае, и что я принемаю вместо него.

А где про это почитать?

А для чего по вашему анализатор кода? Вставьте в IDE и наведите мышку на .Any.

Это я всё прочитал. А где про слеш? Как он позволяет передать два параметра?