Fortran为什么要为Euler 57项目输出一些奇怪的数字?

Fortran为什么要为Euler 57项目输出一些奇怪的数字?,fortran,gfortran,Fortran,Gfortran,夏初学过python,需要切换到Fortran进行实验室工作。有人能帮我弄清楚为什么Fortran在做简单加法时会输出这么多奇数吗?下面的照片应该是一个很好的解释,我试图做什么与该计划 来自 几乎所有平台都将Python浮动映射到IEEE-754“双精度” 在Fortran语言中,它是一个双精度或实数(kind=REAL64)变量。注意Python是弱类型的;你可以把任何你想要的东西塞进一个Python变量,它只是知道如何处理它。Fortran是强类型的,因此如果您想将浮点数据存储为REAL32

夏初学过python,需要切换到Fortran进行实验室工作。有人能帮我弄清楚为什么Fortran在做简单加法时会输出这么多奇数吗?下面的照片应该是一个很好的解释,我试图做什么与该计划

来自

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

在Fortran语言中,它是一个
双精度
实数(kind=REAL64)
变量。注意Python是弱类型的;你可以把任何你想要的东西塞进一个Python变量,它只是知道如何处理它。Fortran是强类型的,因此如果您想将浮点数据存储为REAL32、REAL64或REAL128(无论编译器在
ISO\u Fortran\u env
模块中定义了什么),您必须明确地告诉Fortran您想要哪种特定类型的浮点。默认情况下,Fortran real是REAL32(所谓的“单精度”),因此您不应该对结果与Python生成的结果不匹配感到惊讶

当然,这假设你知道Fortran和Python默认数字精度的秘密知识,这是我们与生俱来的东西,但大多数人都会随着乳牙而失去

换句话说,除非你首先知道正确的问题,否则你不可能知道这一点,没有人会在第一次看到奇怪的、看似不一致的浮点行为时这样做。当FORTRAN还在教的时候,这类问题在课程中很早就被引入,因为该语言是用来处理数字的,混合类型和混合精度算法的问题是严重的,也是众所周知的。你必须迅速了解这些陷阱,因为这是得到可信答案和垃圾之间的区别

现代语言旨在简化cat视频的传送。没有一个真正的计算机科学家会在讨论浮点数学时被当场抓到,所以你需要搜索关于如何使你的数字加起来好以及如何做其他事情好的信息。有很好的信息,但同样,你需要知道你在寻找什么,以便找到大多数程序员在第一次遇到这个问题时没有的信息

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


值得一提的是,我最近也遇到了一个类似的问题,我将一个代码从单精度转换为双精度,忘记了我正在编写的一个二进制文件需要一个单精度值。我只是在测试过程中发现了这个问题,当时可视化软件被损坏的二进制文件阻塞了。事后看来,解决办法是显而易见的;我将一个变量恢复为单精度,一切正常。关键是,即使是有经验的人也会被浮点运算绊倒。芭比是对的;数学很难…

请在问题中包含实际代码;不要链接到外部图像。你听说过整数(和浮点)边界和溢出吗?@Evert抱歉,我以为这张照片比直接代码能提供更多关于我问题的信息。我知道溢出,尽管3+2的第一个结果应该是5。我不认为5会导致溢出错误。您还可以在问题中包含输出(可能是在代码块中格式化的)。链接消失,图像无法被任何人阅读,有时更难阅读(我可以增加字体大小,但这对图像没有帮助)。为什么您认为图像提供的信息比实际代码多?1/您可以将问题包含在实际代码和输出中。2/你可以用新的信息和新的实际问题(你现在只在评论中提出)来修改你的问题。