Я смотрю документацию для FMZM здесь , а из раздела 8. (c) я понимаю, что:
(c) Subroutine FM_FORM does similar formatting, but we supply a character string for
the formatted result. After declaring the strings at the top of the routine, as with
CHARACTER(80) :: ST1,ST2
the WRITE above could become
CALL FM_FORM('F15.6',H,ST1)
CALL FM_FORM('E15.7',T,ST2)
WRITE (*,"(' Step size = ',A,' tolerance = ',A)") TRIM(ST1),TRIM(ST2)
FM_FORM must be used instead of FM_FORMAT when there are more than 200 characters
in the formatted string. These longer numbers usually need to be broken into several
lines.
Мне нужно использовать IM_FORM
функция для отображения больших целых чисел длиннее 200 символов.В моем случае, заменяя IM_FORM на FM_FORM выше.
Следуя этому примеру , я вижу объявление для:
character(200) :: str
и некоторое умное форматирование:
str = IM_format( 'i200', result ) !<----- convert BigInt to string
print *, n, trim( adjustl(str) ) !<----- print huge integers
Это здорово, когда я знаю, что мой вывод менее 200 символов.Однако, поскольку я работаю с библиотекой произвольной точности, есть хорошие шансы, что у меня могут быть цифры значительно больше.
Так что рабочая форма примерно такая:
character(2000) :: str
res = mygetlargenumberfunction(n)
call im_form('i2000', res, str)
Как мне объявитьПеременная character(?) :: str
и мой формат IM_FORM
, чтобы я мог разместить потенциально значительно больший вывод, неизвестный во время компиляции?Мне просто нужно угадать очень большое число?
Обновить адресацию комментариев
Я обращаюсь как к распределению, так и к строке формата в контексте библиотеки произвольной точности FMZM, какэто не связано с вопросом, который помечен как дубликат.
Изменение
character(2000) :: str
на
character (len=:), allocatable :: str
при прочих равных дает
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
...
Segmentation fault (core dumped)
Так что это предложение кажется несовместимым с FMZM.
Использование gfortran -std=f2008 myprogram.F90
и
GNU Fortran (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0