OberonCore
https://forum.oberoncore.ru/

Подскажите, что я делаю не так...
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6932
Страница 1 из 1

Автор:  flapiotun [ Понедельник, 01 Май, 2023 23:53 ]
Заголовок сообщения:  Подскажите, что я делаю не так...

Пример.
Код:
MODULE test;
      IMPORT Log := StdLog;
   PROCEDURE Do* (n: INTEGER);
      VAR i: INTEGER;
   BEGIN
      FOR i := 1 TO n DO
         Log.Real(10.7 * i); Log.Ln;
      END;
   END Do;
END test.

"test.Do(10)"


Результат
    10.7
    21.4
    32.09999999999999
    42.8
    53.5
    64.19999999999999
    74.89999999999999
    85.59999999999999
    96.3
    107.0


Вложения:
Безымянный.jpg
Безымянный.jpg [ 68 КБ | Просмотров: 3629 ]

Автор:  Иван Денисов [ Вторник, 02 Май, 2023 00:05 ]
Заголовок сообщения:  Re: Подскажите, что я делаю не так...

Если вы хотите, чтобы вывод был с фиксированной плавающей точкой, то используйте команду RealForm, тогда в качестве аргумента expW с отрицательным значением возможно указать, сколько разрядов оставлять.
Код:
MODULE test;
      IMPORT Log := StdLog;
   PROCEDURE Do* (n: INTEGER);
      VAR i: INTEGER;
   BEGIN
      FOR i := 1 TO n DO
         Log.RealForm(10.7 * i, 16, 0, -2, " "); Log.Ln;
      END;
   END Do;
END test.


Команда Log.Real же эквивалентна Log.RealForm(x, 16, 0, 0, digitspace), и в этом случае ББ сам подбирает, сколько разрядов после плавающей точки отобразить, чтобы число было ближе к результату с точностью 16 во время преобразования в строку.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/