Fortran为Project Euler 57输出一些奇怪数字的原因是什么?

时间:2017-07-20 03:07:56

标签: fortran gfortran

在夏天开始学习python,需要切换到Fortran进行实验室工作。有人可以帮我辨别为什么Fortran在进行简单的添加时会输出这样的奇数吗?下面的照片应该是我正在尝试使用该程序的一个很好的解释。

Fortran vs Python program

1 个答案:

答案 0 :(得分:1)

来自Python's floating-point tutorial

  

几乎所有平台都将Python浮点数映射到IEEE-754“双精度”

在Fortran术语中是double precisionreal(kind=REAL64)变量。请注意,Python是弱类型;你可以将任何你想要的内容填充到Python变量中,它只是知道如何处理它。 Fortran是强类型所以如果你希望你的浮点数据存储为REAL32,REAL64或REAL128(无论你的编译器在ISO_Fortran_env模块中定义什么),你必须明确地告诉Fortran哪个具体你想要的漂浮类型。默认情况下,Fortran实数是REAL32(所谓的“单精度”),所以你不应该对结果与Python产生的结果不匹配感到惊讶。

当然,假设你知道Fortran和Python的默认数值精度的秘密神秘知识,我们都生来就有这样但我们大多数人都因为我们的宝宝牙齿而失去了

换句话说,除非你知道首先要问的正确问题,否则你无法知道这一点,第一次他们没有看到奇怪的,看似不一致的浮点行为。当FORTRAN仍然被教授时,这种问题很早就在课程中引入,因为该语言用于处理数字,混合型和混合精度算术的问题是严重且众所周知的。你必须快速了解这些陷阱,因为这是获得可信答案和垃圾之间的区别。

现代语言旨在简化猫视频的传送。没有真正的计算机科学家会因为讨论浮点数学而陷入困境,因此您需要搜索obscure backwater websites以获取有关如何使您的数字加起来以及做其他好事的信息。那里有很好的信息但是,你需要知道你在寻找什么,以便找到大多数程序员第一次遇到这个问题时没有的。

简短的回答是了解计算机如何模拟实数,您使用的语言如何存储这些数字,并确保您使用的数据类型支持您的应用程序所需的精度。希望这比告诉你改写你的问题或RTFM更有帮助。

对于它的价值,我最近被一个类似的问题所困扰,我将代码从单精度转换为双精度,忘记了我写的二进制文件之一需要一个精度值。我只在测试过程中发现了这一点,当可视化软件在破碎的二进制文件上窒息时。后见之明,解决方案显而易见;我将一个变量恢复为单精度,一切都很好。关键是,即使是经验丰富的人也会被浮点数绊倒。芭比是对的;数学 很难......

相关问题