Еще вопросы по фортрану

durka82

Как приводить типы в фортране?
Как получить число пи?
Насчет числа пи - оно используется в куче библиотек, но почему-то его само из них получить нельзя
Кроме того, я уже про
Почему нельзя использовать exp, sqrt, sin и тп при задании параметра (константы) через выражение?

Вопрос еще актуален, если вдруг кто знает

Ivan8209

1. По умолчанию.
2. Объявить.
3. ATAN.
4. Сказано же: так устроен мир.
---
...Я работаю антинаучным аферистом...

durka82

1. По умолчанию.

Приводить по умолчанию - это как?
Как, например, привести real4 к real8?
2. Объявить.

Нафига, если есть библиотеки тригонометрии, где пи точно есть, но его оттуда почему-то нельзя получить
3. ATAN.
Так конечно можно, но я хочу сделать real(8parameter::pi=...
А так сделать нельзя из-за 4
4. Сказано же: так устроен мир.
А в стандарте 2003-го года такие вещи слечано не поправили?
Мб стоит копать в этом направлении?..

Ivan8209

1. Повышение точности должно быть доступно по умолчанию.
2. Это должен знать каждый. Наизусть.
3. Найди функцию с более точным значением.
Умножение на степень двойки, кстати, менять погрешность не будет.
4. Может быть.
Хотя сомнительно.
См. "Wisdom."
---
...Я работаю...

durka82

1. Повышение точности должно быть доступно по умолчанию.

Есть функции, которые точность ответа меняют в зависимости от точности параметра.
2. Это должен знать каждый. Наизусть.

Что знать? Значение числа Пи?
Или откуда его брать?
3. Найди функцию с более точным значением.
Умножение на степень двойки, кстати, менять погрешность не будет.

Проблема не в точности, а в возможности использования.

Ivan8209

1. Примеры?
2. Число "пи."
3. Невозможно использовать функцию ATAN?
---
...Я работаю антинаучным аферистом...

durka82

1. Примеры?
Да любая тригонометрия:
например
real(4) a
sin(a) будет типа real(4)
а
real(8) a
sin(a) будет типа real(8)
2. Число "пи."
А нафига его помнить, если оно должно быть доступно из библиотек?!
Может быть и e надо наизусть помнить?
3. Невозможно использовать функцию ATAN?
Следующий вызов не работает (не компилируется) в cvf 6.6
real,parameter::PI=acos(-1.)
И даже такой не работает
real::PI=acos(-1.)

Elina74

Почему нельзя использовать exp, sqrt, sin и тп при задании параметра (константы) через выражение?

Точно так же в Си и других, наверное языках программирования. Это происходит потому, что компилятор не занимается аналитическими вычислениями и не знает, что sin(PI/6) = 1/2. Он вычисляет синус через сумму рядов на этапе исполнения, а не на этапе компиляции. Такой вот он глупый компилятор.

Ivan8209

"...И других, наверное, языках программирования."


Gforth 0.6.2, Copyright (C) 1995-2003 Free Software Foundation, Inc.
Gforth comes with ABSOLUTELY NO WARRANTY; for details type `license'
Type `bye' to exit
1 s>d d>f fatan 4 s>d d>f f* fconstant pi
1 s>d d>f fatan 4 s>d d>f f* fconstant pi redefined pi ok
pi f.
pi f. 3.14159265358979 ok




guile> (define pi (* 4 (atan 1
guile> pi
3.14159265358979


Очевидно, я что-то неправильно делаю.
---
...Я работаю антинаучным аферистом...

rosali


Это происходит потому, что компилятор не занимается аналитическими вычислениями и не знает, что sin(PI/6) = 1/2. Он вычисляет синус через сумму рядов на этапе исполнения, а не на этапе компиляции.

Во-первых уже давно никто никаких рядов не суммирует:


double mysin(double x)
{
return(sin(x;
00401080 fld qword ptr [esp+4]
00401084 fsin
}


Во-вторых нет никаких _объективных_ причин запрещать вычислять на этапе компиляции не только примитивы процессора (add, mul, fsin ...) но и _произвольные_ _пользовательские_ функции. Что, разработчики компилятора боятся, что компилятор тогда можно будет "повесить"? Его и так можно повесить, напишу, скажем,


template<int N>
class C
{
public:
typedef C<N+1>::T T;
T t;
};
C<0> x;


И повиснем... Ну, конечно не повиснем, а в INTERNAL ERROR свалимся, но это в принципе одно и то же...

Ivan8209

На самом деле, такие объективные причины есть.
И чтобы убедиться в этом, достаточно попытаться продумать,
как такое можно сделать.
С учётом того, что в _самом_ языке тригонометрических действий нет.
Ну, жизнь у фортранов и сей такая тяжёлая.
---
...Я работаю антинаучным аферистом...

rosali

как такое можно сделать

Что означает "можно сделать"? Можно сделать в существующих C-ях/Fortran-е/... или можно сделать другой язык в котором это будет?

Ivan8209

"Можно сделать" означает именно "можно сделать."
Попробуй представить, как должен быть устроен компилятор.
Именно сей и фортранов.
Как это сделать в некоторых других языках, я вполне представляю.
---
...Я работаю антинаучным аферистом...

Elina74

Можно сделать в существующих C-ях/Fortran-е/... или можно сделать другой язык в котором это будет?

Можно сделать новый компилятор для старых С/Фортран. Конечно, если у тебя есть исходники... Таких "если" очень много...

Ivan8209

Исходники есть.
Возьмёшься?
---
...Я работаю антинаучным аферистом...

durka82

А ключа для последнего фортрана от интела нету случайно?
w_fc_p_8.1.019

durka82

И Array Visualizer-a нет случайно?
Оставить комментарий
Имя или ник:
Комментарий: