Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
_VisualC上的下一步&x2B+; 我需要在Visual C++ 32位上使用函数nxEtfFETF计算一些与参考函数比较的结果的ULP距离。_C++_C_Visual C++ - Fatal编程技术网

_VisualC上的下一步&x2B+; 我需要在Visual C++ 32位上使用函数nxEtfFETF计算一些与参考函数比较的结果的ULP距离。

_VisualC上的下一步&x2B+; 我需要在Visual C++ 32位上使用函数nxEtfFETF计算一些与参考函数比较的结果的ULP距离。,c++,c,visual-c++,C++,C,Visual C++,C99为浮点和双倍提供NEXTAFFTF和NEXTAFFER,但Visual C++不支持这些函数。然而,Visual C++ 2010支持来自64位的NEXTAFFTF和NEXTAFFER,而仅支持…对于32位型号,下一步是支持和来自 是否有一种方法可以让NEXTAFFTF在VisualStudio上工作,可能达到Visual C++ 2005?< /P> 谢谢, 克里斯托夫你可以随时实现它 Boost.Math中有一个模板化的等价物nextafter,请参阅 C99函数必须使用后缀f 我来区

C99为浮点和双倍提供NEXTAFFTF和NEXTAFFER,但Visual C++不支持这些函数。然而,Visual C++ 2010支持来自64位的NEXTAFFTF和NEXTAFFER,而仅支持…对于32位型号,下一步是支持和来自

是否有一种方法可以让NEXTAFFTF在VisualStudio上工作,可能达到Visual C++ 2005?< /P> 谢谢,


克里斯托夫

你可以随时实现它


Boost.Math中有一个模板化的等价物
nextafter
,请参阅

C99函数必须使用后缀f 我来区分浮标和长标 双重版本。C++使用模板 取而代之的是机制

在此处找到一个代码:

/*
 *  nextafterf.c
 *  cLibm
 *
 *  Created by Ian Ollmann on 6/14/07.
 *  Copyright 2007 Apple Inc. All rights reserved.
 *
 */
...
float nextafterf( float x, float y )
{
union{ float f; uint32_t u;} ux = { x };
uint32_t    step = 1;

if( y != y || x != x)
    return x + y;

if( y <= x ) // a subtraction here would risk Inf-Inf
{
    if( y == x )
        return y;   //make sure sign of 0 is correct

    step = -1;
}

//correct for the sign
int32_t signMask = (int32_t) ux.u >> 31;
step = (step ^ signMask) - signMask;

uint32_t absux = ux.u & 0x7fffffffU;

if( absux == 0 )                // zero
{
    ux.f = y;
    ux.u = (ux.u & 0x80000000U) + 1U;
    return ux.f;
}

ux.u += step;
return ux.f;
}
/*
*下一步
*cLibm
*
*由伊恩·奥尔曼于2007年6月14日创作。
*版权所有2007苹果公司。保留所有权利。
*
*/
...
浮点下一个浮点(浮点x,浮点y)
{
联合{float f;uint32_t u;}ux={x};
uint32_t步骤=1;
如果(y!=y | | x!=x)
返回x+y;
如果(y>31;
步骤=(步骤^signMask)-signMask;
uint32\u t absux=ux.u&0x7fffffffU;
如果(absux==0)//0
{
ux.f=y;
ux.u=(ux.u&0x80000000U)+1U;
返回ux.f;
}
ux.u+=阶跃;
返回ux.f;
}


工作?

不知道C++。我听说VisualStudioC编译器不是C99编译器。所以,如果你需要C99特性,切换编译器(或者用编译器制造商施压,以包含下一版本中的特性)。。不幸的是,谷歌代码搜索已经不存在了。这个答案不再有多大帮助。@Slavik81-你可以使用Code.ohloh.net(以前是koders.com)。我唯一的抱怨是你必须复制和粘贴才能获得项目的URL。leads to(而且dir包含许多其他数学函数)。从提交信息来看,此文件似乎来自musl,它使用MIT许可证: