// #include <stdio.h>
// #include <stdlib.h>
// #include <math.h>
// #include "pico/stdlib.h"
// #include "pico/float.h" // Required for using single-precision variables.
// #include "pico/double.h" // Required for using double-precision variables.
/**
* @brief LAB #02 - TEMPLATE
* Main entry point for the code.
*
* @return int Returns exit-status zero on completion.
*/
float wallisProductFloat(int limit){
float n=0;
float final=1;
float varOne;
float varTwo;
//FORMULA 2
for(n=1; n<limit; n++)
{
varOne = (n*2)/((2*n)-1);
varTwo = (n*2)/((2*n)+1);
final *= varOne*varTwo;
}
return final*2;
}
double wallisProductDouble(int limit){
double n=0;
double final=1;
double varOne;
double varTwo;
//FORMULA 2
for(n=1; n<limit; n++)
{
varOne = (n*2)/((2*n)-1);
varTwo = (n*2)/((2*n)+1);
final *= varOne*varTwo;
}
return final*2;
}
int main() {
#ifndef WOKWI
// Initialise the IO as we will be using the UART
// Only required for hardware and not needed for Wokwi
gpio_put_all;
#endif
// Print a console message to inform user what's going on.
//printf("Hello World!\n");
float wallisFloat = wallisProductFloat(100000);
float floatError = abs((3.14159265359-wallisFloat)/3.14159265359);
double wallisDouble = wallisProductDouble(100000);
double doubleError = abs((3.14159265359-wallisDouble)/3.14159265359);
printf("Rosemary Doyle Results: Student No.22335687 \n");
printf("Single Precion Result: %f \n", wallisFloat);
printf("Single Precision Approximation Error %f \n", floatError);
printf("Double Precion Result: %f \n", wallisDouble);
printf("Double Precision Approximation Error %f \n", doubleError);
// Returning zero indicates everything went okay.
return 0;
}