Armadilloフォーラム

Armadillo-840でstrtodを使った浮動小数点文字列の変換が出来ない

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
#include

#include

#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 ソースファイルとメイクファイル

コメント

kes-konishi

2016年4月22日 17時32分

KES)小西です。

armhfとarmelの 違いということはないでしょうか?
ツールチェインを確認してみてはいかがでしょうか?

murata

2016年4月25日 9時51分

お早いコメントありがとうございます。

>
> KES)小西です。
>
> armhfとarmelの 違いということはないでしょうか?
> ツールチェインを確認してみてはいかがでしょうか?

arm-linux-gnueabi-gccを使用しておりましたが、
クラスコンパイラをarm-linux-gnueabihf-gccにすることにより期待した結果を
をえることができました。

経験のない現象で困っていましたのでとても助かりました。
ありがとうございます。