Konvertieren von unsigned long long, double in C

Erkenne ich diese Frage sein könnte-Prozessor abhängig, aber hoffentlich kann jemand mich in die richtige Richtung. Für das Leben von mir, ich kann nicht herausfinden, wie die Umwandlung einer unsigned long long int repräsentiert Nanosekunden, um eine doppelte Vertretung Sekunden in C (ich verwende eine 32-bit-big-endian PowerPC 405 für diesen bestimmten test und einen GNU-C99-compiler).

Ich versucht habe:

unsigned long long int nanoseconds = 1234567890LLU;
double nanoseconds_d = nanoseconds*1e-9;

Auch:

nanoseconds_d = ((double) nanoseconds)*1e-9;

In beiden Fällen bekomme ich nur 0. Was mache ich hier falsch?

BEARBEITET, UM HINZUFÜGEN VOLLSTÄNDIGES BEISPIEL

#include <stdio.h>
#include <stdlib.h>

int
main( int argc, char *argv[] )
{
    unsigned long long int nanoseconds = 1234567890LLU;
    double nanoseconds_d = nanoseconds * 1e-9;
    printf("%g\n", nanoseconds_d);

    return 0;
}

MAKEFILE

SRCS    = simple.c    
INCLUDE := -I$(PWD)            
CFLAGS  := -O0 -g3 -Wall -fmessage-length=0 -mhard-float -fsigned-char -D_REENTRANT
LIBS    := -lc

OBJS = $(SRCS:.c=.o)
PROG = $(SRCS:.c=).out

all: $(PROG)

$(PROG): $(OBJS)
    @echo "Linking object files with output."
    $(CC) -o $(PROG) $(OBJS) $(LIBS)
    @echo "Linking complete."

$(OBJS): $(SRCS)
    @echo "Starting compilation."
    $(CC) $(CFLAGS) $(INCLUDE) -c $<
    @echo "Compilation complete."   

clean::
    @$(RM) *.o *.out
Funktioniert gut hier. Was ist der Unsinn, den Wert, und wie sind Sie dann zu drucken?
Haben Sie vielleicht stolperte über einen compiler-Fehler. Die Konvertierung einer 64-bit-Wert ohne Vorzeichen zu double gemacht werden würde, mit einer Sequenz von mehreren Anweisungen (im Gegensatz zu nur einer), und diesem wenig verwendeten Reihenfolge wäre falsch, zumindest in einigen Fällen für Ihren compiler. Als test/Abhilfe, versuchen Sie aus der Summe der Ergebnisse von zwei Bekehrungen 32-bit -> doppelt.
Pascal, ich glaube, du bist auf etwas. Es funktioniert gut, wenn ich in Summe zwei lange Ganzzahlen konvertieren und dann zu verdoppeln.
Bitte zeigen Sie uns, dieses "Unsinn-Wert".
Ich habe nicht in der Lage gewesen zu duplizieren, den Unsinn, den Wert, das ist der Grund, warum ich noch nicht gepostet. Ich bin immer 0 für jede Konvertierung, die ich versuchen. Der Unsinn, den Wert müssen gewesen ein Tippfehler oder etwas, Entschuldigung.

InformationsquelleAutor shansen | 2013-05-23

Schreibe einen Kommentar