相关疑难解决方法(0)

安静的NaN和信号NaN有什么区别?

我读过关于浮点的内容,我知道NaN可能来自操作.但我无法完全理解这些概念是什么.有什么区别?

在C++编程期间可以生成哪一个?作为程序员,我可以编写一个程序来导致sNaN吗?

floating-point nan ieee-754

81
推荐指数
2
解决办法
2万
查看次数

在C++中,只有<,==和>中的一个在浮点数上保证是真的吗?

在C++中,我有一个保证,对于任何给定float afloat b,唯一的一个a < b,a == b而且a > b是真的吗?

如果这在编译器和平台之间有所不同,我对x86上的Visual C++感兴趣.

c++ floating-point standards floating-point-comparison

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

如何在c中生产NaN浮子?

float f = (float)'a';
if(f < 0){ 
}   
else if(f == 0){ 
}   
else if(f > 0){ 
}   
else{
    printf("NaN\n");                                                          
}   
Run Code Online (Sandbox Code Playgroud)

f0如果是a,则不会大于/等于/小于NaN.

但是如何f在第一时间产生这样的?

我尝试了各种方法来制作一个NaN,但没有工作..

c floating-point nan

18
推荐指数
3
解决办法
5万
查看次数

如何在C++ double或int变量中存储某种"null"?

我有一个看起来像这样的课程

struct A {
     double a1;
     int b1;
     double a2;
     int b2;
};
Run Code Online (Sandbox Code Playgroud)

我要读出一个文件值a1,b1,a2,和b2.大多数情况下,所有四个数字都在文件中,但有时只有两个数字.

当有两个数字时,我想将值存储在a1,b1并且我想在" a2和"中存储"无" b2.如果a2b2为指针,我可以将它们分配是nullptr,但他们不是指针.

有什么我可以存储doubleint变量,以表明"没有"存储?

我知道Boost.Optional是可用的,但我正在努力避免使用该库.

c++ null c++11

13
推荐指数
2
解决办法
4万
查看次数

C++ NaN字节表示在赋值期间更改

尝试将NaN分配给x64处理器上的变量

*dest = *(float*)&sourceNaN;
Run Code Online (Sandbox Code Playgroud)

哪里

unsigned char sourceNaN[] = {00,00, 0xa0, 0x7f};
Run Code Online (Sandbox Code Playgroud)

浮点指令fld和fstp(在反汇编中看到)将0xa0字节更改为0xe0.因此,目的地有一个额外的位设置.有人可以解释为什么会这样吗?这是一个Windows应用程序.

汇编语言代码:

005C9B9C  mov         eax,dword ptr [ebp+10h]  
005C9B9F  fld         dword ptr [ebp-80h]  
005C9BA2  fstp        dword ptr [eax] 
Run Code Online (Sandbox Code Playgroud)

c++ floating-point nan

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

Template Class,C++的默认值

有没有办法为模板类提供默认值?

比如说我有一个类TimeSeries,这是模板化的.我有一个叫做Foo()返回的函数T.

template <typename T>
class TimeSeries
{
    T foo();
}
Run Code Online (Sandbox Code Playgroud)

我想做Foo()一些计算并返回类型的东西T.但如果它不能,我希望它给出一个默认值.如果T是的话double,我希望如此NaN.如果T是的话int,我希望如此0.

TimeSeries<double> t;
t.foo(); // returns NAN

TimeSeries<int> t;
t.foo(); // returns 0
Run Code Online (Sandbox Code Playgroud)

我怎么做到这一点?

一个糟糕的解决方案是Foo()采用默认值.

template <typename T>
class TimeSeries
{
    T foo(T defaultValue)
    {
       T ret;
       // if OK
       ret = computeValue();
       // if not OK
       ret = defaultValue;
       return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以默认值是 …

c++ templates

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