相关疑难解决方法(0)

%g printf说明符的确切含义是什么?

%g说明符似乎并不在多数来源记录它运行得的方式行事.

根据我发现的大多数来源,在使用printf说明符的多种语言中,说明%g符应该等同于%f或者%e- 对于提供的值产生较短的输出.例如,在撰写此问题时,cplusplus.com表示说明g符意味着:

使用最短的表示:%e%f

PHP手册说这意味着:

g - %e%f中的较短者.

而且这里有一个堆栈溢出的答案是声称,

%g 使用最短的表示.

Quora的回答声称:

%g 以这两个表示中最短的方式打印数字

但这种行为不是我在现实中看到的.如果我编译并运行该程序(作为C或C++ - 它是一个在两者中具有相同行为的有效程序):

#include <stdio.h>

int main(void) {
    double x = 123456.0;
    printf("%e\n", x);
    printf("%f\n", x);
    printf("%g\n", x);
    printf("\n");

    double y = 1234567.0;
    printf("%e\n", y);
    printf("%f\n", y);
    printf("%g\n", y);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

...然后我看到这个输出:

1.234560e+05
123456.000000
123456

1.234567e+06
1234567.000000
1.23457e+06
Run Code Online (Sandbox Code Playgroud)

显然, …

c language-agnostic floating-point printf format-specifiers

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

如何制作"std :: cout << 123456789.12"打印"123456789.12"?

我该怎么做

std::cout << 123456789.12
Run Code Online (Sandbox Code Playgroud)

打印这个:

123456789.12
Run Code Online (Sandbox Code Playgroud)

它始终打印这个:

1.23457e+008
Run Code Online (Sandbox Code Playgroud)

我知道我必须玩旗帜,但我无法弄清楚正确的组合.如果我设置固定标志,则打印

123456789.120000
Run Code Online (Sandbox Code Playgroud)

c++ cout decimal

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

C ++和Raku中的NativeCall之间的输出不同

我正在尝试编写一个函数,用于从此处获取的累积分布函数

这是我的cpp代码:

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;

double normalCDF( double x )
{
   return  0.5 * ( 1.0 + erf( M_SQRT1_2 * x ) );

}

int main() {

    cout << normalCDF(4.8) << endl;    
    cout << normalCDF(5.4) << endl;
    cout << normalCDF(5.6) << endl;
    cout << normalCDF(5.8) << endl;
    cout << normalCDF(5.1) << endl;
    cout << normalCDF(-37.5) << endl;
    cout << normalCDF(-36.0) << endl;
    cout << normalCDF(-37.6) << endl;
    cout …
Run Code Online (Sandbox Code Playgroud)

c++ math nativecall raku

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

在C++中使用pow时的精度损失

10 ^ 1.64605 = 44.2639330165

但是在C++中使用pow:

double p = pow(10,1.64605) returns 44.2641. 
Run Code Online (Sandbox Code Playgroud)

有没有办法提高这里的精度?我尝试将双方都投入long double但是这也没有帮助.

更有趣的是:

cout<<p;
double a = -1.64605;
cout<<pow(10,-a);
p = pow(10, (-p));
cout<<p;
Run Code Online (Sandbox Code Playgroud)

输出是:

-1.64605
44.2639
44.2641
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ precision pow

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

准确打印浮点数

自 20 世纪 90 年代起,人们就知道如何快速准确地打印浮点数。Scheme和Java编程语言已经实现了这个算法,但我在C++中找不到类似的东西。

本质上,我正在寻找一小段高效的代码来满足以下测试用例:

void test(double dbl, const char *expected) {
    std::string actual = ...;
    assert(actual == expected);
}

test(3.0, "3.0");
test(3.1, "3.1");
test(0.1, "0.1");
test(1.0 / 3.0, "0.3333333333333333");   // Or maybe one more digit?
Run Code Online (Sandbox Code Playgroud)

双精度字面值会转换为浮点数,浮点数可能与字面值相同,也可能不同。然后,浮点数被转换回字符串。该字符串应尽可能短,同时表示十进制数,当解释为双精度文字时,将再次产生相同的浮点数。

如何使用 cout 以全精度打印双精度值?看起来相关,但接受的答案中的代码无法正确处理 3.1 情况。

c++ floating-point

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

字符串到双精度转换 C++

我正在尝试将字符串转换为双精度数,但我的双精度数在小数点后第三位被截断。

我的字符串看起来像这样:“-122.39381636393”转换后它看起来像这样:-122.394

void setLongitude(string longitude){
    this->longitude = (double)atof(longitude.c_str());

    cout << "got longitude: " << longitude << endl;
    cout << "setting longitude: " << this->longitude << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出示例:

got longitude: -122.39381636393
setting longitude: -122.394
Run Code Online (Sandbox Code Playgroud)

我希望它保留所有小数点,有什么提示吗?

c++ string double

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

double截断为7个字符的输出

double fat = 0.2654654645486684646846865584656566554566556564654654899866223625564668186456564564664564;
cout<<fat<<endl;
Run Code Online (Sandbox Code Playgroud)

结果是:

0.265465

应该是7个字符更长吗?我认为双人能举办更多吗?

我也得到了"长双"的相同结果.

c++

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

为什么 C++ 将超过 6 位小数的双精度数递增到下一个十进制数,而不实际更改该值?

为什么会发生这种行为?第六位之后的小数在 double 中递增到下一位,但在转换为 int 时不递增。

转换为 int 时会引起问题,因为尽管打印 3,d1 在转换为整数时仍然转换为 2 而不是 3

    double d1 = 2.999999; //6 digits after decimal
    double d2 = 2.777777;
    
    double d3 = 2.77777;  //5 digits after decimal
    double d4 = 2.99999;  
    
    cout<<d1<<endl;       //gives 3
    cout<<(int)d1<<endl;  //still gives 2 not 3
    cout<<d2<<endl;       //gives 2.777778
    
    cout<<d3<<endl;       //gives 2.77777 as expected
    cout<<d4<<endl;       //gives 2.99999 as expected
Run Code Online (Sandbox Code Playgroud)

我假设它必须与编译器或精度有关,但我不确定这种意外行为。请帮忙

c++ floating-point types

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

用C++完全精确显示浮点数?

我已经阅读了几个关于用C++显示浮点数的主题,我找不到令人满意的答案.

我的问题是: 如何以科学的格式(尾数/指数)显示C++中浮点数的所有有效数字?

问题是所有数字在基数10中没有相同的有效位数.

例如,a double具有15到17个有效十进制数字精度,但std::numeric_limits<double>::digits10返回15,因此,对于某些数字,我将丢失2个额外十进制数字的精度.

c++ floating-point iostream iomanip floating-point-precision

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

在double类型数组中使用memset()

我想将所有索引值设置-1为双数组.
这是我的代码:

double dp[505];
memset(dp,-1,sizeof(dp));
cout<<dp[0]<<"\n";
Run Code Online (Sandbox Code Playgroud)

但是nan当我试图打印它的价值时,它就显示出来了.

什么nan意思?可以memset()在双数组中使用吗?

c++

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