相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

正确的printf格式说明符为double

doubleprintf中正确的格式说明符是什么?是它%f还是它%lf?我相信它%f,但我不确定.

代码示例

#include <stdio.h>

int main()
{
   double d = 1.4;
   printf("%lf", d); // Is this wrong?
}
Run Code Online (Sandbox Code Playgroud)

c floating-point double printf format-specifiers

451
推荐指数
5
解决办法
96万
查看次数

'浮动'与'双'精度

代码

float x  = 3.141592653589793238;
double z = 3.141592653589793238;
printf("x=%f\n", x);
printf("z=%f\n", z);
printf("x=%20.18f\n", x);
printf("z=%20.18f\n", z);
Run Code Online (Sandbox Code Playgroud)

会给你输出

x=3.141593
z=3.141593
x=3.141592741012573242
z=3.141592653589793116
Run Code Online (Sandbox Code Playgroud)

输出的第三行741012573242是垃圾,第四行116是垃圾.双打总是有16个有效数字,而浮点数总是有7个有效数字吗?为什么双打没有14位重要人物?

c floating-point

145
推荐指数
5
解决办法
46万
查看次数

printf和co如何区分float和double

由于它没有强类型,我认为它只是选择了正确的内存大小并根据参数的类型对其进行解释.但是float和double都使用%f,它们的大小不同.

PS我可以看到如何通过将值复制到临时和转换(这是正确的吗?)可以起作用,但是它对scanfs/sscanf有什么作用?

c floating-point printf

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

为什么printf()将float提升为double?

从上一个问题:

如果你试图传递float给printf它,它会double 在printf收到它之前被提升

printf()是一个可变函数吧?可变参数函数在传递之前是否会提升float参数double?

c c++ floating-point printf variadic-functions

27
推荐指数
4
解决办法
3193
查看次数