我不能确定你的错误是怎么引起的。可能咱们的编译器不同。
你的代码在我这里的问题是:
虚参和实参精度不同。在程序中,你定义了部分 real*8,但是对应的虚参和返回值却定义为 real。比如 主程序里的 z1(双精度),传入函数g里面的x却定义为单精度。
主程序 Do 死循环了。z2_jiashe 和 z2_suan 每一次循环都没有发生改变,于是永远跳不出循环。
我给你的建议是:
同一个程序,统一使用 real*8 或 real*4,尽量不要混用,除非你很自信能理清他们的关系。
检查 Do 循环,尤其是 z2_jiashe 和 z2_suan,是否应该每次循环不同?