小编Juh*_*a P的帖子

与 abs() 的方程给出了错误的答案 (gcc/g++)

不知怎的,我从涉及库函数abs()的方程中得到了错误的结果。这是我存在问题的代码:

main.cpp -------------------------------------

#include <iostream>
#include <cmath>

#include "test999.h"

using namespace std;

int main()
{
    float n = 11;
    ak r;

    r = test(n);
    printf("\n");
    for(int i = 0; i < n; i++){
        printf("r.yp[%d] = %3.7f \n", i, r.yp[i]);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

test999.h ------------------------------------------

struct ak{
    float yp[20];
};

ak test(int n){

    float u[] = {0, 0, 0, 0, 0, 0, 0, 0.5, 4.5, 35, 10, 25, 40, 55};
    ak r;
    float a, b;

    for(int i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
218
查看次数

GCC mod() 定义

我正在使用 GCC 在 C++ 中制作更快的 mod(x,2) 函数(使用 -O3 -ffast-math 编译),并发现 GCC 和 Octave 之间的结果存在差异:

float fast_fmod2(float x){ // over 50x faster than std::fmod(x, 2.0f)
    x *= 0.5f;
    return 2.0f * ( x - std::floor(x));
}
Run Code Online (Sandbox Code Playgroud)

结果(mod(输入,2.0f)):

Input       : -7.8539786 
std::fmod()  : -1.853978633881
Octave mod(): 0.146021366119
fast_fmod2  : 0.146021366119
...
Input       : 7.8539805
std::fmod()  : 1.853980541229
Octave mod(): 1.853980541229
fast_fmod2  : 1.853980541229
Run Code Online (Sandbox Code Playgroud)

我还检查了其他几个数学软件,看起来至少 Sollya 和 Wolfram|Alpha 支持 Octave 结果,并且之前提到的记录了与 Octave 相同的函数定义。

GCC将 mod 函数定义为:

mod(A, P) = A - (int(A/P) …
Run Code Online (Sandbox Code Playgroud)

c++ gcc function

1
推荐指数
1
解决办法
300
查看次数

标签 统计

c++ ×2

function ×1

gcc ×1