双精度浮点数赋值
ld 为什么显示0据资料显示:long double应该用LF 或者Lf wp231957 发表于 2019-3-24 10:24
据资料显示:long double应该用LF 或者Lf
用了,但还是显示0.0000000 #include<stdio.h>
int main()
{
long doublea;
a=0.123456789000;
printf("=====%.12llf\n",a);
return 0;
}
c++10.0 编译 可以得到正确结果LF 不可以,但Lf 可以 (你试一下)
=====0.123456789000 #include<stdio.h>
int main()
{
long doublea;
a=0.1234567890007899552122;
printf("=====%.22Lf\n",a);
printf("=====%.22llf\n",a);
return 0;
}
e:\>new
=====0.1234567890007899500000
=====0.1234567890007899500000
这两个都可以 ,但是 后面4位已经丢失了失真了
wp231957 发表于 2019-3-24 17:07
e:\>new
=====0.1234567890007899500000
=====0.1234567890007899500000
还是不行
1.浮点数不能用==来比较
2.你是用的神马编译器 Qt 自带的 MinGW 64位
wp231957 发表于 2019-3-24 17:35
1.浮点数不能用==来比较
2.你是用的神马编译器
它会Warning ,但可以执行,如果1.111不加f就不执行if语句 浮点数不存在相等的概念,只能是差值达到一个满意度,就认为一样了 wp231957 发表于 2019-3-24 17:53
浮点数不存在相等的概念,只能是差值达到一个满意度,就认为一样了
那为啥显示为0,我看网上说是Windows不支持long double的输出 终于搞定了,5楼的代码 在微软的c++10.0下 是能够通过的(单位电脑上)
但是 在家里的电脑上(gcc/mingw 8.1)却是始终无法通过
下面的代码
#include<stdio.h>
int main()
{
long doublea;
a=0.1234567890007899552122;
printf("=====%.22Lf\n",a);
printf("=====%.22llf\n",a);
return 0;
}
运行结果:
E:\>a
=====0.1234567890007899487737
=====0.0000000000000000000000
可见,gcc 是不支持%llf的,仅仅支持%Lf
而且在我电脑上 同样后面几位数据都失真了
下面是重中之重:
E:\>gcc -posix new.c 需要-posix参数 才是 My_A 发表于 2019-3-24 17:55
那为啥显示为0,我看网上说是Windows不支持long double的输出
这事和windows 无关 windows被你躺枪了
long double 是c99提出来的一种数据类型,那么只要编译器支持c99 就可以使用long double wp231957 发表于 2019-3-24 18:50
终于搞定了,5楼的代码 在微软的c++10.0下 是能够通过的(单位电脑上)
但是 在家里的电脑上(gcc/mingw ...
-posix 是什么参数? 你先看看管不管用吧,其实网上搜到的资料是使用-ansi 参数但是实测无效 E:\>gcc new.c
E:\>a
=====0.0000000000000000000000
=====0.0000000000000000000000
E:\>gcc -ansi new.c
E:\>a
=====0.0000000000000000000000
=====0.0000000000000000000000
E:\>gcc -posix new.c
E:\>a
=====0.1234567890007899487737
=====0.0000000000000000000000
wp231957 发表于 2019-3-24 19:07
你先看看管不管用吧,其实网上搜到的资料是使用-ansi 参数但是实测无效
-posix 管用,但不知道甚么意思 去官网溜达一圈 奈何E文太差 实在是找不到自己想知道的东西,以后再说吧 wp231957 发表于 2019-3-24 20:23
去官网溜达一圈 奈何E文太差 实在是找不到自己想知道的东西,以后再说吧
行吧,谢谢
页:
[1]