この質問はプロセッサに依存する可能性があることは承知していますが、うまくいけば誰かが私を正しい方向に向けることができます. 私の人生では、ナノ秒を表す unsigned long long int を C で秒を表す double に変換する方法を理解できません (この特定のテストには 32 ビットのビッグエンディアンの PowerPC 405 を使用し、GNU C99コンパイラ)。
私はもう試した:
unsigned long long int nanoseconds = 1234567890LLU;
double nanoseconds_d = nanoseconds*1e-9;
また:
nanoseconds_d = ((double) nanoseconds)*1e-9;
どちらの場合も、0 を取得します。ここで何が間違っていますか?
完全な例を追加するために編集
#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;
}
メイクファイル
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