Solved

find max value after some calculation

Posted on 2006-10-30
14
233 Views
Last Modified: 2012-05-05



#include <stdio.h>


float matrix [3][3]={{0.5,0.25,0.25},
                     {0.375,0.125,0.375},
                     {0.125,0.675,0.375}};

main (){
    int i,j,k;

     for (i=0; i<3; i++){
          printf("\n");
         for (j=0; j<3; j++) {
             printf("\n");
            for (k=0; k<3; k++){
              printf("Prob(%d%d%d)=%.5f\n",i,j,k,matrix[i][j]*matrix[j][k]);   ------------>? how to find max value
           
            }//end third for
                       
        }// end second for
    }// end first for


    system("pause");
}
0
Comment
Question by:rmtogether
  • 7
  • 7
14 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 17838648

#include <stdio.h>
#include <float.h>


float matrix [3][3]={{0.5,0.25,0.25},
                     {0.375,0.125,0.375},
                     {0.125,0.675,0.375}};

main (){
    int i,j,k;
    float max = -FLT_MAX;

     for (i=0; i<3; i++){
          printf("\n");
         for (j=0; j<3; j++) {
             printf("\n");
            for (k=0; k<3; k++){
   
               if( max < matrix[i][j]*matrix[j][k] ){ max = matrix[i][j]*matrix[j][k]; }
              printf("Prob(%d%d%d)=%.5f\n",i,j,k,matrix[i][j]*matrix[j][k]);   ------------>? how to find max valu
           
            }//end third for
                       
        }// end second for
    }// end first for


    system("pause");
}
0
 

Author Comment

by:rmtogether
ID: 17838719
thanks,

what is "-FLT_MAX" means?
0
 
LVL 84

Expert Comment

by:ozo
ID: 17838780
It is the smallest floating point number
0
 

Author Comment

by:rmtogether
ID: 17838850
thanks,

Can I ask you the last question? Since the max value is happen in more than one pleace, can I print a list of them?

for example,
in this program, the max value  is 0.25313 and happen in Prob (121), prob (210), prob(221). I would like have an end summary to show something like

   printf("max prob is: %.5f\n",max);
   printf("they are.....")---------------------------------? list of item has max value





#include <stdio.h>
#include <float.h>


float matrix [3][3]={{0.5,0.25,0.25},
                     {0.375,0.125,0.375},
                     {0.125,0.675,0.375}};

main (){
    int i,j,k;
    float max = -FLT_MAX;

     for (i=0; i<3; i++){
          printf("\n");
         for (j=0; j<3; j++) {
             printf("\n");
            for (k=0; k<3; k++){
   
               if( max < matrix[i][j]*matrix[j][k] ) {max = matrix[i][j]*matrix[j][k];
               }
                 printf("Prob(%d%d%d)=%.5f\n",i,j,k,matrix[i][j]*matrix[j][k]);  
           
            }//end third for
                       
        }// end second for
    }// end first for
   
   printf("\n");
   printf("max prob is: %.5f\n",max);
   printf("they are.....")---------------------------------? list of item has max value

    system("pause");
}
0
 
LVL 84

Expert Comment

by:ozo
ID: 17839038
It's generally not safe to rely on floating point to be the same when they happen in more than one place but in this case, all the values in your matrix are dyadic rationals, which can be exactly represented in floating point numbers when FLT_RADIX==2

      
   printf("max prob is: %.5f\n",max);
   printf("they are.....")
     for (i=0; i<3; i++){
         for (j=0; j<3; j++) {
            for (k=0; k<3; k++){
   
               if( max == matrix[i][j]*matrix[j][k] ){  printf("Prob(%d%d%d)\n",i,j,k);  }
           
            }//end third for
                       
        }// end second for
    }// end first for
   
0
 

Author Comment

by:rmtogether
ID: 17839127
hi, ozo

I put the code like below, but seems not work.. could you help me about it?

#include <stdio.h>
#include <float.h>


float matrix [3][3]={{0.5,0.25,0.25},
                     {0.375,0.125,0.375},
                     {0.125,0.675,0.375}};

main (){
    int i,j,k;
    float max = -FLT_MAX;

     for (i=0; i<3; i++){
          printf("\n");
         for (j=0; j<3; j++) {
             printf("\n");
            for (k=0; k<3; k++){
   
               if( max < matrix[i][j]*matrix[j][k] ) {max = matrix[i][j]*matrix[j][k];
               }
                 printf("Prob(%d%d%d)=%.5f\n",i,j,k,matrix[i][j]*matrix[j][k]);  
           
            }//end third for
                       
        }// end second for
    }// end first for
   
   
   printf("max prob is: %.5f\n",max);
   printf("they are.....");
     for (i=0; i<3; i++){
         for (j=0; j<3; j++) {
            for (k=0; k<3; k++){
   
               if( max == matrix[i][j]*matrix[j][k] ){  printf("Prob(%d%d%d)\n",i,j,k);  }
           
            }//end third for
                       
        }// end second for
    }// end first for

    system("pause");
}
0
 
LVL 84

Expert Comment

by:ozo
ID: 17840317
What does not seem to work?
0
Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

 

Author Comment

by:rmtogether
ID: 17840928
there is  nothing showing after "they are...."
0
 

Author Comment

by:rmtogether
ID: 17840951

I don't see anything printed from this line

   if( max == matrix[i][j]*matrix[j][k] ){  printf("Prob(%d%d%d)\n",i,j,k);  }
0
 

Author Comment

by:rmtogether
ID: 17840965
it works after I change  float max = -FLT_MAX; to

double max = -FLT_MAX;
0
 
LVL 84

Expert Comment

by:ozo
ID: 17841090
This looks like an instance of the dangers of comparing floating point numbers for equality.
As I look more carefully at
float matrix [3][3]={{0.5,0.25,0.25},
                     {0.375,0.125,0.375},
                     {0.125,0.675,0.375}};
I see that you have 0.675 which is not represented exactly in floating point numbers with FLT_RADIX==2
instead of 0.625 which could have been represented exactly, so there could be round off errors that keep the comparison from being exact.

one way to handle it would be to use exact integer arithmetic with
long matrix [3][3]={{500,250,250},
                     {375,125,375},
                     {125,675,375}};
or to have some error tolerance
like
epsilon=0.0001;
 if( fabs(max - matrix[i][j]*matrix[j][k]) < epsilon ){  printf("Prob(%d%d%d)\n",i,j,k);  }


0
 

Author Comment

by:rmtogether
ID: 17841210
thanks,

(1) what does FLT_RADIX==2 means?
(2) if I change matrix to long and make
     printf to printf("Prob(%d%d%d)=%f\n",i,j,k,matrix[i][j]*matrix[j][k]*0.000001), do I still have round off problem?
0
 
LVL 84

Expert Comment

by:ozo
ID: 17841292
A floating-point number (x) is defined by the following model:

x =s * b^e *
p
&#931; f[k]*b^&#8722;k , emin &#8804; e &#8804; emax
k=1

s sign (±1)
b base or radix of exponent representation (an integer > 1)
e exponent (an integer between a minimum emin and a maximum
p precision (the number of base-b digits in the significand)
f[k] nonnegative integers less than b (the significand digits)

FLT_RADIX represents b
0
 
LVL 84

Accepted Solution

by:
ozo earned 500 total points
ID: 17841322
if you change matrix to long, matrix[i][j]*matrix[j][k] will not have a round off problem (although there could be an overflow problem)
matrix[i][j]*matrix[j][k]*0.000001 could have a round off problem, since 0.000001 might really be
0.000000999999997475242707878351 or 0.000000999999999999999954748112


0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Retrun object in plist format 5 54
In desperate need of help 8 132
My eclipse editor won't start ? 4 144
How to translate this 2-line while loop into C from Perl? 8 71
Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This is a short and sweet, but (hopefully) to the point article. There seems to be some fundamental misunderstanding about the function prototype for the "main" function in C and C++, more specifically what type this function should return. I see so…
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now