murata
2016年4月22日 17時27分
お世話になります。村田と申します。
Armadillo-800EVAで動かしていたプログラム(C言語にて実装)をArmadillo-840で動作させようとしたところ、
プログラムの中で標準関数のstrtodを使用して浮動小数点を表現した文字列をdouble型の変数に変換する処理が
期待通りにしないのですが、何か対処方法はございませんでしょうか?
OSは両方ともLinuxです。
動作確認結果と確認用に作成したソース(Makefile)は下記のとおりです。
・Armadillo-800EVAでの実行結果
inputStr=120, double=120.000000, float=120.000000, answer=120.000000
inputStr=12.0, double=12.000000, float=12.000000, answer=12.000000
inputStr=3.14, double=3.140000, float=3.140000, answer=3.140000
文字列が変数の値(double,float)に変換されていて期待通りの動作。
・Armadillo-840での実行結果
inputStr=120, double=0.000000, float=160782474021152277964669563027490603008.000000, answer=120.000000
inputStr=12.0, double=0.000000, float=160782474021152277964669563027490603008.000000, answer=12.000000
inputStr=3.14, double=0.000000, float=160782474021152277964669563027490603008.000000, answer=3.140000
変換結果(double,float)が期待した値と違う値になっている。
ソース
#include <stdio.h> #include <stdlib.h> #include <errno.h> #define TEST_NUM 3 int main(int argc, char* argv[]) { char *valStr[TEST_NUM] = { "120", "12.0", "3.14", }; double answer[TEST_NUM] = {120.0, 12.0, 3.14}; double dval; float fval; int i; for (i = 0; i < TEST_NUM; i++) { dval = strtod(valStr[i], NULL); fval = strtof(valStr[i], NULL); printf("inputStr=%s, double=%f, float=%f, answer=%f\n", valStr[i], dval, fval, answer[i]); } return 0; }
Makefile
CC = arm-linux-gnueabi-gcc CFLAGS = -O3 -I../include -g LDFLAGS = LDLIBS = LN = $(CC) RM = rm -f SRC = doubleVal.c OBJ = $(SRC:.c=.o) TARGET = double all: $(TARGET) .c.o: $(CC) $(CFLAGS) -c $*.c $(TARGET): $(OBJ) $(LN) $(LDFLAGS) -o $@ $(OBJ) $(LDLIBS) clean: $(RM) $(OBJ) $(TARGET)
なお、コンパイル環境とそれぞれの実行環境は下記のとおりです。
コンパイル環境:
840用開発環境(atde5)でビルドした同じ実行ファイルを800EVA/840でそれぞれ実行
実行環境:
・Armadillo-800EVA:内蔵FlashでLinux起動
カーネル情報:Linux debian 2.6.35-a800eva-at3 #1 PREEMPT Fri Jul 27 16:26:47 JST 2012 armv7l GNU/Linux
・Armadillo-840:SDカードブート(製品マニュアルの手順にて作成したもの)
カーネル情報:Linux armadillo840-0 3.4-at17 #1 PREEMPT Mon Feb 22 20:27:49 JST 2016 armv7l GNU/Linux
ファイル | ファイルの説明 |
---|---|
src.tar.gz | ソースファイルとメイクファイル |
コメント
murata
kes-konishi
2016年4月22日 17時32分
KES)小西です。
armhfとarmelの 違いということはないでしょうか?
ツールチェインを確認してみてはいかがでしょうか?