Strange behavior in C++


 
Thread Tools Search this Thread
Top Forums Programming Strange behavior in C++
# 1  
Old 05-28-2010
Strange behavior in C++

I have the following program:

Code:
int main(int argc, char** argv){
      unsigned long int mean=0;
      
      for(int i=1;i<10;i++){
           mean+=poisson(12);
           cout<<mean<<endl;
       }
       cout<<"Sum of poisson: "<< mean;
       return 0;
}

when I run it, I get the output:

Code:
15
26
41
56
73
82
92
106
116
Sum of poisson: 116

However, if I comment the line " cout<<mean<<endl; ", I get the following unexpected output

Code:
Sum of poisson: 22

What is going on? Why the "cout" line is affecting the variable mean?
I'm using linux, with the following commands

Compile: g++ -Wall -c "%f"
Build: g++ -Wall -o "%e" "%f"

gcc version: 4.4.1

Below is the complete code with the poisson function.

untitle.cpp
Code:
#include <iostream>

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;


#define RAND_UNIFORM (double)rand()/(double)RAND_MAX

 unsigned long int poisson(double lambda){
	double g,p=exp(-lambda);
	double u=RAND_UNIFORM;
	unsigned long int k=0;
	while (u>g){
		p*=(lambda/(double)(++k));
		g+=p;
    };
	return k;
};

int main(int argc, char** argv){
      unsigned long int mean=0;
      
      for(int i=1;i<10;i++){
           mean=mean+poisson(12);
           cout<<mean<<endl;
       }
       cout<<"Sum of poisson: "<< mean;
       return 0;
}

Any help would be much appreciated.
santiagorf

Last edited by santiagorf; 05-28-2010 at 09:15 PM..
# 2  
Old 05-28-2010
The variable g in function poisson is not initialized so the behavior is undefined.
This User Gave Thanks to binlib For This Post:
# 3  
Old 05-28-2010
Bug

Thank you!
That solved the problem!!
I's been five years since I haven't programmed in C. I'll have to review the syntax since I though I was initializing both g and p.
I still wonder why if I uncomment the cout line the program works fine.
# 4  
Old 05-29-2010
To find out the reason, you can dig into the assembly code that g++ produced. But I guess by calling cout, g++ pushed small values onto the stack so that the uninitialized variable g doesn't have a huge value which is what happened with calling cout. With a huge value of g, the while loop is never entered, so the function returns 0 most of the time.
# 5  
Old 06-02-2010
Thank you so much for the information.
This User Gave Thanks to debrah.h48 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Strange behavior of grep

Hi All, I am facing a strange problem while grepping for a process. Here is the small script that i have written. It will look for any process running with the parameter passed to the script. If no process is running it should print appropriate message. $ cat t.ksh #!/bin/ksh set -x ... (9 Replies)
Discussion started by: veeresh_15
9 Replies

2. AIX

Strange behavior with tar

I am trying to create an archive using tar. I am specifying a list of directories using the -L option. For testing purposes I created a simple directory structure: /backup/test /backup/test/test1 /backup/test/test2 The file specified by the -L option, named files.txt, contains:... (8 Replies)
Discussion started by: judykstra
8 Replies

3. Shell Programming and Scripting

Strange behavior on one of my server

I am not sure what is wrong, but I have some strange behavior when printing things out. I do create a file with only one word test, no space, no new line etc. nano file<enter> test<ctrl x>y<enter> Server 1 gets (fail) awk '{print "+"$0"*"}' file *test Server 2 gets (OK) awk '{print... (9 Replies)
Discussion started by: Jotne
9 Replies

4. AIX

Strange memory behavior

Hello together, i have a strange memory behavior on a AIX 7.1 System, which i cannot explain. The Filesystem-Cache will not be grow up and drops often after few minutes. I know if a file was deleted, that the same segment in the FS-Cache will also be cleared. But i am not sure if this is the... (8 Replies)
Discussion started by: -=XrAy=-
8 Replies

5. Ubuntu

Ubuntu strange behavior

It is so till login screen. I mean that when I boot my computer, Ubuntu shows a splash screen with mouse instead of Ubuntu logo and in the login screen it shows XUbuntu login screen... It began when I upgraded to previous kernel, I suppose, but I'm not sure... I can't say that it annoys me very... (6 Replies)
Discussion started by: Sapfeer
6 Replies

6. Shell Programming and Scripting

nawk strange behavior

Dear guys; when deleting repeated lines using nawk as below ; Why the below syntax works? nawk ' !a++' infile > outfile and when using the other below syntax the nawk doesn't work? nawk ' { !a++ } ' infile > outfile or nawk ' { !a++ } ' infile > outfile BR (4 Replies)
Discussion started by: ahmad.diab
4 Replies

7. Shell Programming and Scripting

Very Strange Behavior for redirection

I have searched far and wide for an explanation for some odd behavior for output redirection and haven't come up with anything. A co-worker was working on old scripts which have run for years and embedded in their code were output redirects which worked for the script during execution and then... (5 Replies)
Discussion started by: cahook
5 Replies

8. UNIX for Dummies Questions & Answers

Strange Behavior on COM2

Hi, I have a problem with a new touch screen controller that I am trying to use on a SCO 3.0 system. THe touch screen controller only wants to talk at 9600baud. I have updated /etc/inittab per the manual and also edited /usr/lib/event/devices to use 9600 baud. The only way I can get the... (0 Replies)
Discussion started by: Elwood51
0 Replies

9. UNIX for Dummies Questions & Answers

strange sed behavior

I have a file called products.kp which contains, for example, 12345678,1^M 87654321,2^M 13579123,3 when I run the command cat products.kp| sed -f kp.sed where kp.sed contains s,^M,, I get the output 12345678,1 87654321,2 13579123,3 (5 Replies)
Discussion started by: Kevin Pryke
5 Replies
Login or Register to Ask a Question