【问题标题】:giving parameters into math function将参数赋予数学函数
【发布时间】:2018-05-15 07:17:06
【问题描述】:

如果我在 C 中调用,数学库中的数学函数“trunc”定义为:

extern double trunc _PARAMS((double));

并在我的主文件中调用它:

int i = (int)trunc(2.5);

它工作正常,没有问题。但是,如果我尝试被动地通过 double,例如:

double d = 2.5;
int i = (int)trunc(d);

它不会工作?!?在我的微处理器 STM32F4 IDE 中,它以调试器模式进入:

 Infinite_Loop:
 b  Infinite_Loop

它卡在那里。我还更改了 double 并尝试 float、int、unit8_t、... 没有人不工作。 其他数学函数也可以正常工作,因为我这样称呼它们:

i =  sin(1);
i =  cos(1);

但是,如果这样调用,它也会崩溃:

int a = 1;
i = sin(a);
i = cos(a);

我在微处理器 STM32F4 Discovery 上运行此代码,IDE 是 Eclipse Ac6。

【问题讨论】:

    标签: c microcontroller stm32f4discovery


    【解决方案1】:

    如果你参考trunc() 的手册页,你应该注意,它说

    使用 -lm 链接

    因此,请确保您与 -lm 链接。

    其次,当概要说 double trunc(double x); 时,尝试使用其他数据类型是没有意义的。

    如果您想尝试其他数据类型,那么您应该寻找这些变体:

    float truncf(float x);
    long double truncl(long double x);
    

    测试代码:

    #include<stdio.h>
    #include<math.h>     
    
    int main(void)
    {
        // using trunc function which return
        // Truncated value of the input 
        double d = 2.7;
        printf(" Truncated value is %d \n", (int)trunc(d)); 
    
        return 0;
    }
    

    这产生了一个输出:

     Truncated value is 2
    

    它是用 gcc 5.3.0 版本编译的

    当我在没有-lm 选项的情况下编译相同的代码 gcc 版本 7.2.0 时, 我收到以下警告:

    undefined reference to `trunc'
    error: ld returned 1 exit status
    

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2020-07-14
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多