HI,ALL We use musl in arm process, but found some bugs about math library, x86 process is ok! Here the test result: 1) In ARM mode: (the result is wrong) [ 9.235921][kernel/command/cmd-test.c:44] ceil(-0.125000) = 0.000000, floor(-0.125000) = -1.000000, round(-0.125000) = 0.000000 [ 9.238523][kernel/command/cmd-test.c:44] ceil(-0.250000) = 0.000000, floor(-0.250000) = -1.000000, round(-0.250000) = 0.000000 [ 9.239770][kernel/command/cmd-test.c:44] ceil(-0.375000) = 0.000000, floor(-0.375000) = -1.000000, round(-0.375000) = 0.000000 [ 9.241081][kernel/command/cmd-test.c:44] ceil(-0.500000) = 0.000000, floor(-0.500000) = -1.000000, round(-0.500000) = -0.500000 [ 9.242361][kernel/command/cmd-test.c:44] ceil(-0.625000) = 0.000000, floor(-0.625000) = -1.000000, round(-0.625000) = -0.625000 [ 9.243637][kernel/command/cmd-test.c:44] ceil(-0.750000) = 0.000000, floor(-0.750000) = -1.000000, round(-0.750000) = -0.750000 [ 9.244879][kernel/command/cmd-test.c:44] ceil(-0.875000) = 0.000000, floor(-0.875000) = -1.000000, round(-0.875000) = -0.875000 [ 9.246183][kernel/command/cmd-test.c:44] ceil(-1.000000) = -1.000000, floor(-1.000000) = -1.000000, round(-1.000000) = -1.000000 [ 9.247457][kernel/command/cmd-test.c:44] ceil(-1.125000) = -1.125000, floor(-1.125000) = -1.125000, round(-1.125000) = -1.125000 [ 9.248333][kernel/command/cmd-test.c:44] ceil(-1.250000) = -1.250000, floor(-1.250000) = -1.250000, round(-1.250000) = -1.250000 [ 9.249303][kernel/command/cmd-test.c:44] ceil(-1.375000) = -1.375000, floor(-1.375000) = -1.375000, round(-1.375000) = -1.375000 [ 9.250456][kernel/command/cmd-test.c:44] ceil(-1.500000) = -1.500000, floor(-1.500000) = -1.500000, round(-1.500000) = -1.500000 [ 9.251730][kernel/command/cmd-test.c:44] ceil(-1.625000) = -1.625000, floor(-1.625000) = -1.625000, round(-1.625000) = -1.625000 [ 9.252975][kernel/command/cmd-test.c:44] ceil(-1.750000) = -1.750000, floor(-1.750000) = -1.750000, round(-1.750000) = -1.750000 [ 9.254272][kernel/command/cmd-test.c:44] ceil(-1.875000) = -1.875000, floor(-1.875000) = -1.875000, round(-1.875000) = -1.875000 [ 9.255563][kernel/command/cmd-test.c:44] ceil(-2.000000) = -2.000000, floor(-2.000000) = -2.000000, round(-2.000000) = -2.000000 [ 9.256813][kernel/command/cmd-test.c:44] ceil(-2.125000) = -2.125000, floor(-2.125000) = -2.125000, round(-2.125000) = -2.125000 [ 9.257610][kernel/command/cmd-test.c:44] ceil(-2.250000) = -2.250000, floor(-2.250000) = -2.250000, round(-2.250000) = -2.250000 [ 9.258029][kernel/command/cmd-test.c:44] ceil(-2.375000) = -2.375000, floor(-2.375000) = -2.375000, round(-2.375000) = -2.375000 [ 9.259500][kernel/command/cmd-test.c:44] ceil(-2.500000) = -2.500000, floor(-2.500000) = -2.500000, round(-2.500000) = -2.500000 ‍ 2) In X86 mode: (the result is correct) [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.125000) = 0.000000, floor(-0.125000) = -1.000000, round(-0.125000) = 0.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.250000) = 0.000000, floor(-0.250000) = -1.000000, round(-0.250000) = 0.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.375000) = 0.000000, floor(-0.375000) = -1.000000, round(-0.375000) = 0.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.500000) = 0.000000, floor(-0.500000) = -1.000000, round(-0.500000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.625000) = 0.000000, floor(-0.625000) = -1.000000, round(-0.625000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.750000) = 0.000000, floor(-0.750000) = -1.000000, round(-0.750000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-0.875000) = 0.000000, floor(-0.875000) = -1.000000, round(-0.875000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.000000) = -1.000000, floor(-1.000000) = -1.000000, round(-1.000000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.125000) = -1.000000, floor(-1.125000) = -2.000000, round(-1.125000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.250000) = -1.000000, floor(-1.250000) = -2.000000, round(-1.250000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.375000) = -1.000000, floor(-1.375000) = -2.000000, round(-1.375000) = -1.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.500000) = -1.000000, floor(-1.500000) = -2.000000, round(-1.500000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.625000) = -1.000000, floor(-1.625000) = -2.000000, round(-1.625000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.750000) = -1.000000, floor(-1.750000) = -2.000000, round(-1.750000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-1.875000) = -1.000000, floor(-1.875000) = -2.000000, round(-1.875000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-2.000000) = -2.000000, floor(-2.000000) = -2.000000, round(-2.000000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-2.125000) = -2.000000, floor(-2.125000) = -3.000000, round(-2.125000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-2.250000) = -2.000000, floor(-2.250000) = -3.000000, round(-2.250000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-2.375000) = -2.000000, floor(-2.375000) = -3.000000, round(-2.375000) = -2.000000 [ 3.790000][kernel/command/cmd-test.c:44] ceil(-2.500000) = -2.000000, floor(-2.500000) = -3.000000, round(-2.500000) = -3.000000 The test code: int test(int argc, char ** argv) { double n = 0.0; int i; for(i = 0; i < 20; i++) { n = n - 0.125; printf("ceil(%f) = %f, floor(%f) = %f, round(%f) = %f\n", n, ceil(n), n, floor(n), n, round(n)); } return 0; }‍ May be rint trunc have same problem. this is supper big bug!!! ------------------ ____________________________ 蒋建军 深圳市九鼎创展科技有限公司 地址:深圳市宝安区西乡街道宝源路宝安互联网产业基地A区7栋301 邮编:518101 手机:18665386306 电邮:8192542@qq.com 网站:http://www.9tripod.com 论坛:http://xboot.org