我想编译在netlike.org下载的slatec库。 我写了一个简单的Makefile来编译所有例程。但是,在编译包含机器特定值的d1mach.f等** mach.f文件时出错。 只有当我(我应该,如果我理解正确的描述)取消注释我的机器(英特尔)的值时,才会出现错误。如果我不这样做,编译不会产生错误,但是例程dsos不起作用,即迭代没有启动,而是始终在以下评估测试函数起点。
错误消息:
src/d1mach.f:85:37:
EQUIVALENCE (DMACH(5),LOG10(1))
1
Error: Expecting a comma in EQUIVALENCE at (1)
make: *** [obj/d1mach.o] Error 1
我想我的原因是If a variable name is also a function name (15.5.1), that name must not appear in the list.
我在Fortran77标准中的8.2.1点找到了什么。
有没有人遇到过这个问题并解决了它?
编辑:
d1mach.f的简短版本是:
DOUBLE PRECISION FUNCTION D1MACH (I)
C
INTEGER SMALL(4)
INTEGER LARGE(4)
INTEGER RIGHT(4)
INTEGER DIVER(4)
INTEGER LOG10(4)
C
DOUBLE PRECISION DMACH(5)
SAVE DMACH
C
EQUIVALENCE (DMACH(1),SMALL(1))
EQUIVALENCE (DMACH(2),LARGE(1))
EQUIVALENCE (DMACH(3),RIGHT(1))
EQUIVALENCE (DMACH(4),DIVER(1))
EQUIVALENCE (DMACH(5),LOG10(1))
C
C
DATA DMACH(1) / Z'0010000000000000' /
DATA DMACH(2) / Z'7FEFFFFFFFFFFFFF' /
DATA DMACH(3) / Z'3CA0000000000000' /
DATA DMACH(4) / Z'3CB0000000000000' /
DATA DMACH(5) / Z'3FD34413509F79FF' /
C
C
IF (I .LT. 1 .OR. I .GT. 5) CALL XERMSG ('SLATEC', 'D1MACH',
+ 'I OUT OF BOUNDS', 1, 2)
C
D1MACH = DMACH(I)
RETURN
C
END