Выполнение 128-битных вычислений Fortran 64-битного компьютера

У меня есть 64-битная система Linux. Я компилирую и запускаю свой код на Фортране, используя gfortran, и это выдает некоторое число с удвоенной точностью, т.е. ~ 16 десятичных знаков. например

gfortran some_code.f -o executable1
./executable1
10.1234567898765432

Если я сейчас скомпилирую с флагом -fdefault-real-8, тип двойной точности Фортрана будет преобразован в 16 байтов = 128 бит, и будет выведено некоторое число, но с большей точностью ~33 десятичных знака. например

gfortran -fdefault-real-8 some_code.f -o executable2
./executable2
10.12345678987654321234567898765432

Мой вопрос: как это вычисление могло быть сделано с такой высокой точностью, если мой компьютер только 64-битный?

1 ответ

Решение

Во-первых, тот факт, что ваш процессор является 64-битным, означает, что он использует 64-битные указатели (адреса памяти). Это никак не связано с размерами переменных с плавающей точкой. 32-разрядные процессоры (и даже 16-разрядные!) Прекрасно использовали 64-разрядные числа с плавающей запятой и целые числа.1

128-битные числа с плавающей запятой реализованы в программном обеспечении, это своего рода "эмуляция" 128-битного процессора с плавающей запятой, и это на самом деле очень медленно. Это не потому, что ваш процессор 64-битный, а потому, что блок процессора с плавающей запятой реализует только 64-битную арифметику с плавающей запятой. Так было даже в 32-битных процессорах Intel.

Библиотека, в которой реализованы 128-битные вычисления для GCC, - libquadmath.


1 На самом деле битовые операции с плавающей запятой выполняются в модуле с плавающей запятой (FPU). Раньше это была специальная микросхема, отделенная от процессора, но теперь они всегда интегрированы в потребительские процессоры Intel. В старые времена, если вы не покупали отдельный FPU, вся арифметика с плавающей запятой эмулировалась и работала медленно.

Другие вопросы по тегам