c - Windows/Visual Studio 在完美的 C 程序上变得不稳定
问题描述
好吧,不要自负,也许程序中有一些有趣的地方,但是 GCC 和 Clang 正在编译它并按照预期在 Ubuntu 20.04 和 MacOS 10.14 上运行它。Win 7 上的 Visual Studio 2013 ?那是一个不同的故事。
#include <stdio.h>
#include <math.h>
int main()
{ double num1, num2, result;
printf("\nEnter numbers : ");
scanf("%lf %lf", &num1, &num2);
result = pow(num1,num2);
printf("\n%s %lf\n","Result = ",result);
}
凉爽的 ?在 Mac/Linux 上,当我尝试 128^128 时,我得到了准确的答案528294531135665246352339784916516606518847326036121522127960709026673902556724859474417255887657187894674394993257128678882347559502685537250538978462939576908386683999005084168731517676426441053024232908211188404148028292751561738838396898767036476489538580897737998336.000000
在 VS2013 中编译时没有错误或警告,并在同一台机器(Win7Pro)上运行,我得到:
52829453113566525
后跟许多零,以使答案与上述答案具有相同的位数。
我可以验证其相同的代码,我在这些平台上使用相同的 .c 文件,我看到的唯一变量是编译器和操作系统。像我这样的小开发人员能做些什么来修复微软的烂摊子(看起来是这样)?
注意:所有操作系统都是 64 位的。
编辑:这是来自更大项目 MathHack 的最小可重现示例,可在@ sites.google.com /view/mathhack 获得完整的源代码可在该网站上找到,尽管我怀疑其余代码存在问题.
编辑 2:截图 -
在 MacOSX 10.14 上工作——
https://drive.google.com/file/d/1I0T75vJAUPnbK8y-oCkl_rHSqLTvCWzv/view?usp=sharing
不能在 Win7 SP2 上运行——
https://drive.google.com/file/d/148EuhwYlrWRom4fIPT_wfkxdSIYya3ep/view?usp=sharing
编辑3:
也许这是 Microsoft 在 printf() 实现中的一个错误。嘘。我将升级到最新的 VS,看看是否能解决这个问题。
解决方案
这不是答案,但评论不显示图像:
Visual Studio 2019。编译为 C 代码(/TC 选项)
海事组织很好
上证实验:
int main()
{
int sse = _set_SSE2_enable(1);
double num1, num2, result;
printf("\nEnter numbers : ");
scanf("%lf %lf", &num1, &num2);
result = pow(num1, num2);
printf("\n SSE = %d, %s %lf\n", sse, "Result = ", result);
sse = _set_SSE2_enable(0);
result = pow(num1, num2);
printf("\n SSE = %d, %s %lf\n", sse, "Result = ", result);
}
推荐阅读
- python - 搁置模块甚至不创建搁架
- sql-server - 从 STUFF 中删除尾随逗号
- c# - rfComm 蓝牙连接胰岛素泵
- python-3.x - 如何隐藏以下 PID 响应:“成功:PID 7652 的进程(PID 10272 的子进程)”已使用 Python 从终端终止?
- java - 在 Android 中阻止某些选定的菜单点以进行家长控制
- python - Numpy reshape - 自动填充或移除
- sql - 将重复值的结果汇总到表中
- javascript - 有没有办法将动态参数传递给 array.filter
- javascript - 在 illustrator 中加入相交路径
- asp.net - 使用 .NET Core 3.0 和 Blazor 3.0 预览版 9 恢复包失败