мой вывод не показывает более 6 десятичных знаков после преобразования дробного десятичного числа в двоичное.Мне нужно 12 десятичных знаков - PullRequest
0 голосов
/ 05 октября 2018
int main(){

    long double fraDecimal,fraBinary,bFractional = 0.0,dFractional,fraFactor=0.1;
    long int dIntegral,bIntegral=0;
    long int intFactor=1,remainder,temp,i;

    printf("Enter any fractional decimal number: ");
    scanf("%Lf",&fraDecimal);

    dIntegral = fraDecimal;
    dFractional =  fraDecimal - dIntegral;

    while(dIntegral!=0){
         remainder=dIntegral%2;
         bIntegral=bIntegral+remainder*intFactor;
         dIntegral=dIntegral/2;
         intFactor=intFactor*10;
    }

   for(i=1;i<=12;i++){

       dFractional = dFractional * 2;
       temp =  dFractional;

       bFractional = bFractional + fraFactor* temp;
       if(temp ==1)
             dFractional = dFractional - temp;

       fraFactor=fraFactor/10;
   }

   fraBinary =  bIntegral +  bFractional;
   printf("Equivalent binary value: %Lf",fraBinary);

   return 0;
}

1 Ответ

0 голосов
/ 05 октября 2018

Вместо этого:

printf("Equivalent binary value: %Lf",fraBinary);

Попробуйте:

printf("Equivalent binary value: %.12Lf", fraBinary);

Также обратите внимание, что не всегда правильно отображается последний номер.По крайней мере, на моей машине, где long double составляет 8 байт.Похоже, что это увеличивает точность long double до предела.И, конечно же, этот утверждает, что

53-битная значимость и точность дает от 15 до 17 значащих десятичных разрядов точности

...