Advertisement
Kaelygon

fractional bases with decimal

Jul 20th, 2023
948
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. /*usr/bin/gcc -g -lm -Wall -Wno-unused-function test.c -o test*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5.  
  6.  
  7. //count in base a/b
  8. int main(){
  9.     int numer = 7; //a numerator
  10.     int divis = 3; //b divisor
  11.     long double base = (long double)numer/divis; //a/b
  12.     int digits = 8; //n
  13.     int decimals = 1; //k
  14.     int pf[digits+decimals];
  15.     for(int i=-decimals;i<digits;i++){ //can't have negative array index so offset by + decimals
  16.         pf[i+decimals]=0;  
  17.     }
  18.  
  19.     while(pf[digits+decimals-1]==0){ //loop until most significant number gets a carry
  20.         pf[0]++; //simply count 0 1 2 3... or ...-0.1, 0.0, 0.1...
  21.         for(int i=-decimals;i<digits;i++){
  22.             if(pf[i+decimals]>(numer-1)){   //carry
  23.                 pf[i+decimals]=0;
  24.                 pf[i+decimals+1]++;
  25.             }
  26.         }
  27.         long double dec=0;
  28.         for(int i=-decimals;i<digits;i++){
  29.             dec += pf[i+decimals]*pow(base,i);  //compute (a/b)^n + ... + (a/b)^0 + ... + (a/b)^-k
  30.         }
  31.  
  32.         if(dec>170.666666 && dec<170.666667){ //search and print some range. quick and dirty programming
  33.             for(int i=-decimals;i<digits;i++){//number
  34.                 int cindex = digits - i - 1;
  35.                 int curDigit=pf[cindex]; //current digit, most to least significant
  36.  
  37.                 if(i==digits-decimals){printf(".");}
  38.                 curDigit+=curDigit<10 ? 48 : 97-10 ; //use ascii for anything past base 10
  39.                 printf("%c",(curDigit));
  40.             }
  41.             printf(" base (%d/%d)\n",numer,divis);
  42.  
  43.             int isFirst=1; //boolean to prevent + printing on first power
  44.             for(int i=-decimals;i<digits;i++){//powers sum
  45.                 int cindex = digits - i - 1;
  46.                 int curDigit=pf[cindex]; //current digit, most to least significant
  47.  
  48.                 if(curDigit==0){continue;} //skip zeros
  49.  
  50.                 if(!isFirst){ printf(" + "); }else{ isFirst=0; } //isFirst?
  51.  
  52.                 printf("%d*(%d/%d)^%d",curDigit,numer,divis,digits-1-i-decimals); //print (a/b)^n ... + (a/b)^-k
  53.             }
  54.  
  55.             printf(" = %.11Lf (base 10)",dec);
  56.             fflush(stdout);
  57.             printf("\n");
  58.             return 0;
  59.  
  60.         }
  61.  
  62.     }
  63.  
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement