我想在 fortran 90 中使用自动整数宽度描述符。我提到了输出格式:gfortran 中的太多空白
这个问题说我可以使用I0和F0,0用于“自动”宽度。这是我的示例代码(符合 GNU Fortran 编译器):
PROGRAM MAIN
IMPLICIT NONE
INTEGER :: i
REAL :: j
WRITE (*,*) 'Enter integer'
READ (*,100) i
100 FORMAT (I0)
WRITE (*,*) 'Enter real'
READ (*,110) j
110 FORMAT (F0.0)
WRITE (*,100) 'Integer = ',i
WRITE (*,110) 'Real = ',j
END PROGRAM
Run Code Online (Sandbox Code Playgroud)
存在运行时错误 (unit = 5, file = 'stdin')
Fortran runtime error: Positive width required in format
我误解了自动宽度描述符吗?我应该使用什么选项?
我想使用 C++ 进行大型线性代数计算。首先,我用 C++ 和 matlab 创建了这些比较程序。我也在这里给出了惊人的执行时间。您能否建议击败 matlab 或至少获得可比性能的方法?我知道 C++ 使用高度矢量化的方法进行计算。那么在涉及线性代数的大型科学编程中,是否应该始终使用 matlab 而不是 C++?我个人认为 matlab 不能为大型计算提供良好的性能,因此在这种情况下,C++ 比 matlab 更受欢迎。然而,我的计划结果与这种信念相反。
用 gcc 编译的 C++ 程序:
#include <iostream>
#include <Eigen\Dense> //EIGEN library
using namespace Eigen;
using namespace std;
int main()
{
MatrixXd A;
A.setRandom(1000, 1000);
MatrixXd B;
B.setRandom(1000, 1000);
MatrixXd C;
C=A*B;
}
Run Code Online (Sandbox Code Playgroud)
执行时间:24.141 秒
这是matlab程序:
function [ ] = Trial( )
clear all;
close all;
clc;
tic;
A=rand([1000,1000]);
B=rand([1000,1000]);
C=A*B;
toc
end
Run Code Online (Sandbox Code Playgroud)
经过的时间是 0.073883 秒。
我对 fortran 的 open 命令有疑问。
OPEN (UNIT = , FILE=file-name, ACCESS=access, FORM=form, RECL=recl)`
Access = sequential, direct
FORM=formatted, unformatted
Run Code Online (Sandbox Code Playgroud)
reclis 是文件的记录长度(以字节为单位)
我尝试搜索很多,但无法理解顺序或直接访问、格式化或未格式化文件、文件记录长度的含义。有人可以解释一下这些术语的含义吗?
我做了一个简单的C++程序.我期望浮点输出为5/9,但是为零.有人可以评论,为什么输出是意外的,即零?
#include<iostream>
using namespace std;
void fun(double *ptr);
int main (int argc, char* argv[])
{
double a;
fun(&a);
cout<<a<<endl; // why not floating point 5/9??
}
void fun (double *ptr)
{
*ptr=(5/9);
}
Run Code Online (Sandbox Code Playgroud)