相关疑难解决方法(0)

C#中的float/double Math.Round

float ff = (float)31.15;

double dd = 31.15;

var frst = Math.Round(ff, 1, MidpointRounding.AwayFromZero);

var drst = Math.Round(dd, 1, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)

第一次:31.1

第一次:31.2

有人可以解释原因吗?

c# double rounding

18
推荐指数
2
解决办法
1576
查看次数

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

浮动添加提升到双倍?

今天早上我有一个小型的WTF时刻.WTF可以概括为:

float x = 0.2f;
float y = 0.1f;
float z = x + y;
assert(z == x + y); //This assert is triggered! (Atleast with visual studio 2008)
Run Code Online (Sandbox Code Playgroud)

原因似乎是表达式x + y被提升为double并与之中的截断版本进行比较z.(如果我更改zdouble断言未触发).

我可以看到,出于精确原因,在将结果转换为单精度之前,以双精度执行所有浮点算术是有意义的.我在标准中找到了以下段落(我想我已经知道了,但在这种情况下不是这样):

4.6.1. "类型的右值float可以转换为类型的右值double.值不变"

我的问题是,x + y保证会被提升为双倍,还是由编译人员自行决定?

更新:由于许多人声称不应该使用==浮点数,我只是想说在我正在使用的特定情况下,确切的比较是合理的.

浮点比较棘手的,这里有一个关于这个主题的有趣链接,我认为还没有提到.

c++ floating-point double

12
推荐指数
2
解决办法
3301
查看次数

C++ float vs double cout setprecision oddities(newbie)

任何人都可以解释为什么当我使用setprecision()时,这两个相同值的变量可以输出不同的值?

#include <iostream>
#include <iomanip>
int main()
{
    float a=98.765;
    double b = 98.765;
    //std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::fixed;
    std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::setprecision(2)<<b<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a的输出为98.76,而b的输出为98.77.

c++ math precision floating-accuracy

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

比较C中的相同浮点值

可能重复:
与float文件相比较的奇怪输出

当我尝试比较2个相同的float值时,它不会在以下代码中打印"相等的值":

void main()
{
    float a = 0.7;
    clrscr();
    if (a < 0.7)
        printf("value :  %f",a);
    else if (a == 0.7)
        printf("equal values");
    else
        printf("hello");
    getch();
}
Run Code Online (Sandbox Code Playgroud)

提前致谢.

c c++ floating-point floating-accuracy

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

浮点比较中的问题

void main()
{
    float f = 0.98;
    if(f <= 0.98)
        printf("hi");
    else
        printf("hello");
    getch();
}
Run Code Online (Sandbox Code Playgroud)

我在这里遇到这个问题.使用不同的浮点值得到不同的结果.为什么会这样?

c floating-point floating-point-conversion

6
推荐指数
2
解决办法
2875
查看次数

3.5和3.5f在C++中是否相同?

可能重复:
浮点数与浮点字面值的比较中的奇怪输出
为什么比较double和float导致意外结果?

在下面的代码中我希望答案是"不相等",因为默认情况下3.5 应该是doubleC++,但结果是"相等".

声明float a=3.5ffloat a=3.5?有什么区别?

#include<iostream>
using namespace std;

int main()
{
    float a=3.5;
    if(a==3.5)  
        cout<<"equal"<<endl;
    else
        cout<<"Not equal"<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ floating-point number-formatting

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

偶数单次计算中的`float` vs`double`?

我看到有些人编写代码,其中声明需要浮点的东西的临时使用使用float类型(在C/C++中).这不是一个巨大的矩阵,空间很重要,或者试图更多地融入SIMD,或类似的东西.一些小事情,比如按百分比缩放值,或找到数量之间的比率.

我总是习惯double并且float只考虑空间真正重要的时候.我记得台式机CPU没有浮点硬件的日子,可能会有一些关于软件库性能的说法,但是对于第一个'287协处理器,本机精度仍然是80位,而且float只是为了长期在RAM或文件中存储值,并且不会影响计算速度.

今天,有没有理由使用float而不是double习惯性的方式? 情况1:特定于PC/Mac硬件; 情况2:便携式代码,可能在台式机和移动设备上,如电话.

我应该以我记忆的方式教育我的团队:嘿,你知道,这float是一个半尺寸的东西,double是正常的.或者是否存在一些折衷或者为什么C++程序员会float在任何地方使用它,而且看起来(对我的POV)不知道double存在的是什么?

我的问题并不是特定于语言,但我的术语float是4个字节,double是8个字节.

floating-point

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

为什么浮点数不能比较?

可能重复:
与float文字的float比较中的奇怪输出

#include<stdio.h>
int main()
{
float me = 1.7;
if(me==1.7)
   printf("C");
else
   printf("C++");
}

Output: C++
Run Code Online (Sandbox Code Playgroud)

现在说这种行为的原因是许多浮点数不能用二进制的绝对精度表示.

我的问题是 - 如果计算机以二进制形式思考和操纵.代表性的任何不确定性在比较时me都是相同的1.7.所以两者都应该是平等的.

那么类型转换如何解决这个问题呢? (float)1.7

c c++ floating-point

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

浮点数和双变量的比较

可能重复:浮点数与浮点字面值的比较中浮点数
和双奇数输出之间的差异

我正在使用visual C++ 6.0,在程序中我比较float和double变量例如这个程序

#include<stdio.h>
int main()  
{    
    float a = 0.7f;
    double b = 0.7; 
    printf("%d %d %d",a<b,a>b,a==b);
    return 0;
 }  
Run Code Online (Sandbox Code Playgroud)

我得到1 0 0作为输出

并为

#include<stdio.h>
int main()  
{    
    float a = 1.7f;
    double b = 1.7; 
    printf("%d %d %d",a<b,a>b,a==b);
    return 0;
 }  
Run Code Online (Sandbox Code Playgroud)

我输出0 0 0.

请告诉我为什么我得到这些奇怪的输出,有没有办法在同一个处理器上预测这些输出.如何比较C中的两个变量?

c floating-point double comparison

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