代码之家  ›  专栏  ›  技术社区  ›  Bobby

C真的用于很多科学计算吗?

  •  10
  • Bobby  · 技术社区  · 15 年前

    我现在在大学里上数学课,叫做“科学计算”,教授告诉我们C是科学计算最常用的语言,我想知道这个教授有多准确?

    10 回复  |  直到 9 年前
        1
  •  24
  •   dmckee    15 年前

    在我的业务(粒子物理学)中,我们几乎从Fortran 77直接移动到C++和Python。我们中那些 照顾 关于编程,大家都知道C,但它只是为特定的应用程序(嵌入式DAQ板、专用驱动程序等)编写的。

    但是,学习C会给你一个坚实的编程基础,和教授争论很少是有利可图的。

        2
  •  12
  •   Community CDub    7 年前

    我不认为你教授的回答对你有好处,即使它是正确的。

    在我作为科学计算和数据系统的顾问的经验中,C确实被使用了很多,但是FORTRAN和C++也是如此。到目前为止,Python是最常用的脚本语言。

    我想这会改变的。现在最大的问题是并行计算,这很痛苦(MPI有人吗?)在我提到的传统语言中。我的猜测是,许多并行化将(也应该)被移动到虚拟机:Java或.NET;也就是说,我认为并行化应该是JIT的工作。是否会启用,比如, Fortress 或者传统语言中的一种,我不知道。英特尔正在努力 parallel tools 对于C/C++,我想知道像TeLaCtTa这样的东西在将来是否会更好(我还没有听说过科学界的任何人尝试过它——大金融都有,但它们不是那么开放)。

    如果问题是你应该学习什么才能在科学计算领域找到一份工作,那么我想说的第一件事是,你更可能因为你的科学技能而被雇佣,而不是你的编程技能(这部分解释了许多科学代码的糟糕状态,更多关于这方面的信息,请参见 this SO topic )如果你 因为你的编程技能(可能是hpc)而被雇佣,然后考虑到在这位教授看来,在不远的将来,那些对于新项目来说可能是过时的。不过,了解一些巨蟒并不伤人,包括 NumPy .

        3
  •  7
  •   Gavin H    15 年前

    据我所知,FORTRAN在科学上是非常常见的,但是C的通用性已经足够,对于某些人来说,对于大多数任何类型的编程来说,它都是一个很好的解决方案。

        4
  •  5
  •   wespiserA    13 年前

    对于生物信息学和计算生物学来说,C是非常流行的。

        5
  •  4
  •   mjv    15 年前

    许多“科学计算”都是用mathematica、matlab等类似工具来处理的。

    好。。。在引擎盖下,MATLAB是用C或C++编写的,但是Mathematica的许多部分都是用Mathematica自己编写的。可以肯定的是,由于历史的原因,也因为C的内在特性,许多科学和高科技计算软件库等都是用C/C++编写的。

    我猜想C/C++将继续为许多实时和高性能应用提供有利的优势,也许对于原始计算本身(这不能用高级语言来表达),但对于紧环的局部优化,以及与各种组件的接口,它们是物理设备或软件。重新定义元素,例如并行计算框架。

    正如DMCKE指出的,C的研究为大规模程序设计提供了良好的基础,至少是程序化编程。它也有实际的应用,所以你的教授的观点在这个时候有一些强有力的支持。但是,做吧!尊重地继续挑战你的教授和长辈们的智慧,了解到有时候像好的禅师一样,他们会让你走上一条道路,不是为了目的地,而是为了旅行/过程。

        6
  •  1
  •   Ferry Meidianto    15 年前

    C在编程中被广泛使用。我们中的大多数人曾经用C语言编码,尤其是在大学时。这只是你对教授的偏好,我想是:—)

        7
  •  1
  •   J D    12 年前

    C真的用于很多科学计算吗?

    科学计算包含许多不同的东西,因此,科学计算使用许多不同的编程语言。

    传统上,科学计算意味着高性能的计算,其范围主要局限于线性代数和一些谱方法(如ffts),并且主要在Fortran中完成。从那时起,科学计算的范围扩大了很多,现在许多人都在考虑技术计算(如海量数据、图形绘制、原型制作)的问题,而其他人则选择了符号计算等高性能计算的新形式。

    诸如python、r、mathematica和matlab等语言通常用于技术计算。像C、C++和FORTRAN这样的语言仍然用于数字压缩。像ocaml这样的语言用于大规模符号计算。

        8
  •  1
  •   cdcdcd    9 年前

    作为一个为科学家和工程师开发软件的专业程序员,我可以说几乎所有的数值方法都是用C语言编写的,所以在我们的例子中,这是真的。我们有C++和FORTRAN的口袋。在性能方面,很难击败编码良好的C和良好的编译器。我们偶尔也会进行组装。

    但是世界已经改变了很多。python是一种很好的语言,是最好的语言imho,可以称为本地库。然后,R又是源解释语言,但是大量的数值方法库全部编译为C或C++。然后添加所有新的硬件加速方法,如opencl和许多绑定…C或Fortran不再是唯一的答案。但是对于传统的CPU来说,处理C和ASM是最好的。

        9
  •  0
  •   Liza    10 年前

    根据我在不同实验室和研究机构工作的经验,我认为学习一门计算机语言只会给你一个基础和编程入门。C或Java将是一个很好的语言,作为介绍,所以你的教授是正确的,一定程度上。

    在计算/开发工作环境中,能够将您在一种语言中的知识应用到另一种语言是成功的关键。当你走访不同的公司/研究所/实验室小组时,你会发现他们中的每个人在语言/软件方面都有自己的偏好。快速学习新事物比记忆一种特定语言的语法更重要。

    当然,如果要为项目选择一种语言,请选择1,该语言具有所需的库。

        10
  •  0
  •   sanaris    9 年前

    是的,带MPI的是ANSI C。

    有时人们希望使用“目标C”,这意味着他们将函数放入大类的方法中,它的每一个示例都将在单独的核心上运行。注意,这不是C++,而是“带有对象的C”。除了方法对象模型之外,没有使用C++特征。这只是将同一个旧的C包装成“Rational对象模型”,允许使用中间层等等。

    上面的好例子:lammps。

    魅力++是另一个获得“现代方式的好旧C”的好方法。

    在科学语言的另一个山丘上是lisp、haskell和其他元语言群。这是另一个“软”的科学规划世界,在那里时间不是问题,而是答案的存在。