In: Computer Science
I'm getting a conversion issue with this program. When I ran this program using the Windows command prompt it compiles and runs without issues. Although, when I run it using the zyBooks compiler it keeps giving me these conversion errors in the following lines: main.c: In function ‘main’: main.c:53:24: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] averageCpi += cpi[i] * instructionCount[i] * Million; main.c:57:29: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] averageCpi = averageCpi / (totalInstructions * Million); main.c:58:47: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] mips = (frequency * Million) / (averageCpi * Million); main.c:58:37: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] mips = (frequency * Million) / (averageCpi * Million); main.c:59:32: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] executionTime = ((averageCpi * (totalInstructions * Million)) / (frequency * Million)) * 1000; main.c:59:65: error: conversion to ‘float’ from ‘long int’ may alter its value [-Werror=conversion] executionTime = ((averageCpi * (totalInstructions * Million)) / (frequency * Million)) * 1000; cc1: all warnings being treated as errors Is there a more efficient way to convert from float to long int? Here is the program: #include <stdio.h> int main() { int instructionCount[100], totalInstructions = 0, cpi[100], noOfClass = 0, frequency = 0, ch = 0; float averageCpi = 0 , executionTime , mips; const long MILLION = 1000000; do{ printf("\n Performance Assessment: "); printf("\n ----------- -----------"); printf("\n 1) Enter Parameters"); printf("\n 2) Print Results"); printf("\n 3) Quit"); printf("\n Enter Selection: "); scanf("%d",&ch); if(ch == 1){ printf("\n Enter the number of instruction classes: "); scanf("%d",&noOfClass); printf("\n Enter the frequency of the machine (MHz): "); scanf("%d",&frequency); for (int i = 0; i < noOfClass; ++i) { printf("\n Enter CPI of class %d : ",(i+1)); scanf("%d", &cpi[i]); printf("\n Enter instruction count of class %d (millions): ",(i+1)); scanf("%d", &instructionCount[i]); totalInstructions += instructionCount[i]; } } else if(ch == 2){ printf("\nFREQUENCY (MHz): %d", frequency); printf("\nINSTRUCTION DISTRIBUTION"); printf("\nCLASS \t CPI \t COUNT"); for (int i = 0; i < noOfClass; ++i) { printf("\n %d \t %d \t %d",(i+1), cpi[i], instructionCount[i]); averageCpi += (cpi[i] * instructionCount[i] * MILLION); } averageCpi = averageCpi / (totalInstructions * MILLION); mips = (frequency * MILLION) / (averageCpi * MILLION); executionTime = ((averageCpi * (totalInstructions * MILLION)) / (frequency * MILLION)) * 1000; printf("\n PERFORMANCE VALUES"); printf("\n AVERAGE CPI \t %.2f", averageCpi); printf("\n TIME (ms) \t %.2f", executionTime ); printf("\n MIPS \t %.2f", mips); printf("\n"); } }while(ch != 3); return 0; }
#include <stdio.h>
int main() {
int instructionCount[100], totalInstructions = 0, cpi[100], noOfClass = 0, frequency = 0, ch = 0;
float averageCpi = 0 , executionTime , mips;
const long MILLION = 1000000;
do{
printf("\n Performance Assessment: ");
printf("\n ----------- -----------");
printf("\n 1) Enter Parameters");
printf("\n 2) Print Results");
printf("\n 3) Quit");
printf("\n Enter Selection: ");
scanf("%d",&ch);
if(ch == 1){
printf("\n Enter the number of instruction classes: ");
scanf("%d",&noOfClass);
printf("\n Enter the frequency of the machine (MHz): ");
scanf("%d",&frequency);
for (int i = 0; i < noOfClass; ++i) {
printf("\n Enter CPI of class %d : ",(i+1));
scanf("%d", &cpi[i]);
printf("\n Enter instruction count of class %d (millions): ",(i+1));
scanf("%d", &instructionCount[i]);
totalInstructions += instructionCount[i];
}
} else if(ch == 2){
printf("\nFREQUENCY (MHz): %d", frequency);
printf("\nINSTRUCTION DISTRIBUTION");
printf("\nCLASS \t CPI \t COUNT");
for (int i = 0; i < noOfClass; ++i) {
//performing the type conversion to float so that we will no get errors
printf("\n %d \t %d \t %d",(i+1), cpi[i], instructionCount[i]);
averageCpi =(float)averageCpi+ (cpi[i] * instructionCount[i] * MILLION);
}
//performing the type conversion to float so that we will no get errors
averageCpi = (float)averageCpi / (totalInstructions * MILLION);
mips = (float)(frequency * MILLION) / (averageCpi * MILLION);
executionTime = (float)((averageCpi * (totalInstructions * MILLION)) / (frequency * MILLION)) * 1000;
printf("\n PERFORMANCE VALUES");
printf("\n AVERAGE CPI \t %.2f", averageCpi);
printf("\n TIME (ms) \t %.2f", executionTime );
printf("\n MIPS \t %.2f", mips);
printf("\n");
}
}while(ch != 3);
return 0;
}
Note : If you like my answer please rate and help me it is very Imp for me