【发布时间】:2010-02-15 05:05:32
【问题描述】:
我写了一个名为 absD 的函数,我想返回它的参数的绝对值。 我正在使用带有 cygwin 的 GCC 内联汇编..
我不明白为什么它不起作用。我正在加载到内存中。然后进入 st(0) 我在哪里使用 fabs - 绝对值。我必须分配内存吗?
我正在尝试在这里学习 C 汇编,所以请多多关照。请给我很好的帮助。 谢谢
这是代码,然后是错误:
#include <stdio.h>
#include <stdlib.h>
#define PRECISION 3
double absD (double n)
{
asm(
"fldl %[nIn]\n"
"fabs\n"
"fstpl %[nOut]\n"
: [nOut] "=m" (n)
: [nIn] "m" (n)
);
return n;
}
int main (int argc, char **argv)
{
double n = 0.0;
printf("Absolute value\n");
if (argc > 1)
n = atof(argv[1]);
printf("abs(%.*f) = %.*f\n", PRECISION, n, PRECISION, absD(n));
return 0;
}
这是输出:
~ $ gc a3
gcc -Wall -g a3.c -o a3
~ $ ./a3
Absolute value
abs(0.000) = 0.000
~ $
不输出其绝对值... 谢谢。。
【问题讨论】:
-
为什么不只包括
math.h并使用fabs( )?这通常至少与您在这里所拥有的一样快。如果您还想更快,请使用 GCC 特定的内在函数__builtin_fabs( )。 -
零的绝对值为零。有什么问题?