Convert floating-Zahl binäre Darstellung Programm in C

#include "ieee754.h"
#include <stdio.h>
#include <math.h>

//This program convert a floating number to its binary representation (IEEE754) in computer memory
int main() {
    long double f, binaryTotal, binaryFrac = 0.0, frac, fracFractor = 0.1;
    long int integer, binaryInt = 0;
    long int p = 0, rem, temp;

    printf("\nEnter floating number: ");
    scanf("%Lf", &f);

    //separate the integer part from the input floating number
    integer = (int)f;

    //separate the fractional part from the input floating number
    frac = f - integer;

    //loop to convert integer part to binary
    while (integer != 0) {
        rem = integer % 2;
        binaryInt = binaryInt + rem *pow(10, p);
        integer = integer / 2;
        p++;
    }

    //loop to convert fractional part to binary
    while (frac != 0) {
        frac = frac * 2;
        temp = frac;
        binaryFrac = binaryFrac + fracFractor * temp;
        if (temp == 1)
            frac = frac - temp;

        fracFractor = fracFractor / 10;
    }

    binaryTotal = binaryInt + binaryFrac;
    printf("binary equivalent = %Lf\n", binaryTotal);
}

Ich versuche zu konvertieren floating-Zahl binäre Darstellung (64-bit). Dieser code funktioniert, aber nicht perfekt. Zum Beispiel, wenn ich konvertieren .575 es gibt mir 0.100100 aber wenn ich die Konvertierung mithilfe dieser website http://www.exploringbinary.com/floating-point-converter/, die richtige Ausgabe sollte sein 0.1001001100110011001100110011001100110011001100110011

Ich habe Schwierigkeiten zu verstehen, was mein code kürzt die Anzahl. Könnte mir jemand helfen wie man es beheben? Ich Schätze Ihre Hilfe.

  • Kompilieren Sie alle Warnungen aktiviert.
  • es gibt keine Warnung: ideone.com/aIShip
  • Sie sollten schreiben, wie viel Ziffern, die Sie wollen, nachdem die .: "%.20Lf" drucken 0.10010011001100110011.
  • mch ist richtig, mein Kommentar ist nicht wirklich relevant hier.
  • also versuchte ich "%.64Lf" und jetzt gibt mir 0.1001001100110011056694794308319362841075417236424982547760009766 was nicht richtig binäre Zahl. Ich bin nicht sicher, warum ich diese Frage.. könnten Sie das erklären?
  • Das ist, weil die Zahl ist nicht exakt darstellbar, im Binär - (oder double). So kann es nur drucken, die nächste Zahl, die gespeichert werden können in einer long double. Speichern Sie Ihre Zahl in einen string.
  • meinst du f, binary insgesamt, binäre frac..etc. sollte initialisiert werden, als string?

InformationsquelleAutor mike | 2016-10-17
Schreibe einen Kommentar