- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在通过终端在我的 mac (10.8.2) 上运行此代码,并且肯定会以“非法指令 4”终止,有人知道为什么或如何阻止它吗?
我很困惑,因为除了 n=43、45、47 和 57 之外,代码运行良好。
同样在 n=60 之后,它似乎对所有 n 都会发生。可能是内存问题,因为它适用于较低的 n 值。
注意:与整数 c 有关的任何事情都纯粹是为了减少第一个 while 循环。最好我希望 while 循环读取 b<251 给我 250 次迭代,但我正在运行类似 b<51 for c=1,2,3,4,5 的东西来获得 5 个不同的文件,有 50 个结果而不是 1有 250 个。
代码如下:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <time.h>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main()
{
int a,b,c,f,i,j,k,m,n,s;
double p,Time,Averagetime,Energy,energy,Distance,Length,DotProdForce,Forcemagnitude,
ForceMagnitude[101],Force[101][4],E[10001],En[501],x[101][4],y[101][4];
clock_t t1,t2;
t1=clock();
b=1;
c=1;
Time=0.0;
while(b<251){
clock_t t3,t4;
t3=clock();
/* set the number of points */
n=45;
/* check that there are no more than 100 points */
if(n>100){
cout << n << " is too many points for me :-( \n";
exit(0);
}
/* reset the random number generator */
srand((unsigned)time(0));
for (i=1;i<=n;i++){
x[i][1]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
x[i][2]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
x[i][3]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
Length=sqrt(pow(x[i][1],2)+pow(x[i][2],2)+pow(x[i][3],2));
for (k=1;k<=3;k++){
x[i][k]=x[i][k]/Length;
}
}
/* calculate the energy */
Energy=0.0;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
Distance=sqrt(pow(x[i][1]-x[j][1],2)+pow(x[i][2]-x[j][2],2)
+pow(x[i][3]-x[j][3],2));
Energy=Energy+1.0/Distance;
}
}
/* Save Original Points */
for(i=1;i<=n;i++){
y[i][1]=x[i][1];
y[i][2]=x[i][2];
y[i][3]=x[i][3];
}
/* Loop for random points m times*/
m=10;
if (m>100){
cout << "The m="<< m << " loop is inefficient...lessen m \n";
exit(0);
}
a=1;
while(a<m){
/* assign random points */
for (i=1;i<=n;i++){
x[i][1]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
x[i][2]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
x[i][3]=((rand()*1.0)/(1.0*RAND_MAX)-0.5)*2.0;
Length=sqrt(pow(x[i][1],2)+pow(x[i][2],2)+pow(x[i][3],2));
for (k=1;k<=3;k++){
x[i][k]=x[i][k]/Length;
}
}
/* calculate the energy */
energy=0.0;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
Distance=sqrt(pow(x[i][1]-x[j][1],2)+pow(x[i][2]-x[j][2],2)
+pow(x[i][3]-x[j][3],2));
energy=energy+1.0/Distance;
}
}
if(energy<Energy)
for(i=1;i<=n;i++){
for(j=1;j<=3;j++){
Energy=energy;
y[i][j]=x[i][j];
}
}
else
for(i=1;i<=n;i++){
for(j=1;j<=3;j++){
energy=Energy;
x[i][j]=y[i][j];
}
}
a=a+1;
}
/* Create string stream 1 */
ostringstream String1;
String1 << "Bestrandonpoints_" << n; //add number
/* Output these points */
ofstream File1 (String1.str().c_str());
File1 << "Energy=" << Energy << "\n";
for(i=1;i<=n;i++){
File1 << x[i][1] << " " << x[i][2] << " " << x[i][3] << "\n";
}
File1.close();
/* For energy file later */
E[0]=Energy;
/* Start doing gradient flow approach */
a=1;
s=0;
f=0;
Forcemagnitude=1.0;
if(n>80)
p=0.005;
else if(n>60)
p=0.01;
else if(n>40)
p=0.02;
else
p=0.05;
while(Forcemagnitude>0.00005){
/* Reset initial force and energy change */
for(i=1;i<=n;i++){
Force[i][1]=0.0;
Force[i][2]=0.0;
Force[i][3]=0.0;
}
/* Calculate force on each particle */
for(i=1;i<=n;i++){
for(j=1;j<i;j++){
Distance=sqrt(pow(x[i][1]-x[j][1],2)+pow(x[i][2]-x[j][2],2)
+pow(x[i][3]-x[j][3],2));
Force[i][1]=Force[i][1]+((x[i][1]-x[j][1])/(pow((Distance),3)));
Force[i][2]=Force[i][2]+((x[i][2]-x[j][2])/(pow((Distance),3)));
Force[i][3]=Force[i][3]+((x[i][3]-x[j][3])/(pow((Distance),3)));
}
for (j=i+1;j<=n;j++){
Distance=sqrt(pow(x[i][1]-x[j][1],2)+pow(x[i][2]-x[j][2],2)
+pow(x[i][3]-x[j][3],2));
Force[i][1]=Force[i][1]+((x[i][1]-x[j][1])/(pow((Distance),3)));
Force[i][2]=Force[i][2]+((x[i][2]-x[j][2])/(pow((Distance),3)));
Force[i][3]=Force[i][3]+((x[i][3]-x[j][3])/(pow((Distance),3)));
}
}
/* Add the force to my points */
for(i=1;i<=n;i++){
DotProdForce=Force[i][1]*x[i][1]+Force[i][2]*x[i][2]+Force[i][3]*x[i][3];
y[i][1]=x[i][1];
y[i][2]=x[i][2];
y[i][3]=x[i][3];
Force[i][1]=Force[i][1]-DotProdForce*y[i][1];
Force[i][2]=Force[i][2]-DotProdForce*y[i][2];
Force[i][3]=Force[i][3]-DotProdForce*y[i][3];
x[i][1] = y[i][1]+p*(Force[i][1]);
x[i][2] = y[i][2]+p*(Force[i][2]);
x[i][3] = y[i][3]+p*(Force[i][3]);
/* Bring it back onto sphere */
Length=sqrt(pow(x[i][1],2)+pow(x[i][2],2)+pow(x[i][3],2));
for (j=1;j<=3;j++){
x[i][j]=x[i][j]/Length;
}
}
/* Calculate the new energy */
energy=0.0;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
Distance=sqrt(pow(x[i][1]-x[j][1],2)+pow(x[i][2]-x[j][2],2)
+pow(x[i][3]-x[j][3],2));
energy=energy+1.0/Distance;
}
}
E[a]=energy;
/* Choose best energy and therefore best points */
if (energy<Energy)
Energy=energy,s=s+1;
else
energy=Energy,f=f+1,p=(9.5*p)/10;
for(i=1;i<=n;i++){
ForceMagnitude[i]=pow((pow(Force[i][1],2)+pow(Force[i][2],2)
+pow(Force[i][3],2)),0.5);
}
for(i=1;i<=n-1;i++){
if(ForceMagnitude[i]<ForceMagnitude[i+1])
ForceMagnitude[i]=ForceMagnitude[i+1];
else
ForceMagnitude[i+1]=ForceMagnitude[i];
}
Forcemagnitude=ForceMagnitude[n];
a=a+1;
}
En[b]=Energy;
b=b+1;
t4=clock();
float diff ((float)t4-(float)t3);
float seconds = diff / CLOCKS_PER_SEC;
Time = Time + seconds;
}
Averagetime = Time/(b-1);
cout << fixed << setprecision (4) << "Average Time: " << Averagetime << "(s) \n";
cout << fixed << setprecision(10) << "Energy=" << Energy << "\n";
t2=clock();
float diff ((float)t2-(float)t1);
float seconds = diff / CLOCKS_PER_SEC;
/* Create string stream 2 */
ostringstream String2;
String2 << "GFPoints_" << n; //add number
/* Output these points */
ofstream File2 (String2.str().c_str());
for(i=1;i<=n;i++){
File2 << x[i][1] << " " << x[i][2] << " " << x[i][3] << "\n";
}
File2.close();
/* Create string stream 3 */
ostringstream String3;
String3 << "GFEnergies_" << n; //add number
/* Output these points */
ofstream File3 (String3.str().c_str());
for(i=1;i<a;i++){
File3 << fixed << setprecision (10) << E[i] << "\n";
}
File3.close();
/* Output to help with gnuin.txt */
ofstream File4 ("mypoints");
for(i=1;i<=n;i++){
File4 << x[i][1] << " " << x[i][2] << " " << x[i][3] << "\n";
}
File4.close();
/* Create string stream 4 */
ostringstream String4;
String4 << "GFInfo_" << n; //add number
/* Output these points */
ofstream File5 (String4.str().c_str());
File5 << "Iterations=" << a-1 << "\n";
File5 << "Successes=" << s << " Failures=" << f << "\n";
File5 << fixed << setprecision(20) << "Energy=" << Energy << "\n";
File5 << fixed << setprecision(5) << "Total run time: " << seconds << "(s) \n";
File5 << fixed << setprecision(5) << "Average run time: " << Averagetime << "(s) \n";
File5.close();
/* Create string stream 5 */
ostringstream String5;
String5 << "GF%Energies_" << n << "_" << c; //add number
/* Output these points */
ofstream File6 (String5.str().c_str());
for(i=1;i<b;i++){
File6 << fixed << setprecision(20) << En[i] << "\n";
}
File6.close();
cout << fixed << setprecision(5) << "Run time: " << seconds << "(s)" << "\n";
return 0;
}
感谢你对这个主题的任何启发,A。
最佳答案
明显的问题是这些行:
E[a]=energy;
En[b]=Energy;
你递增 a
和 b
在每次循环迭代中,但不要根据固定数组边界检查它们;因此,如果循环迭代太多次,您将在数组外写入。
也许您想用动态数组 (std::vector<double>
) 替换它们,或者您可能想在 a
时中止或 b
变得太大了。
关于c++ - 非法指令 4 在 Mac 上使用 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14261820/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!