鱼C论坛

 找回密码
 立即注册
查看: 2875|回复: 18

[已解决]双精度浮点数赋值

[复制链接]
发表于 2019-3-24 00:58:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
ld 为什么显示0
1.png 2.png
最佳答案
2019-3-24 19:09:17
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-24 10:24:21 | 显示全部楼层
据资料显示:long double  应该用LF 或者Lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 15:23:12 | 显示全部楼层
wp231957 发表于 2019-3-24 10:24
据资料显示:long double  应该用LF 或者Lf

用了,但还是显示0.0000000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 17:00:36 | 显示全部楼层
  1. #include<stdio.h>

  2. int main()
  3. {
  4.    long double  a;
  5.    a=0.123456789000;
  6.    printf("=====%.12llf\n",a);
  7.    return 0;
  8. }

复制代码

c++10.0 编译 可以得到正确结果  LF 不可以,但  Lf 可以 (你试一下)

=====0.123456789000
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 17:07:46 | 显示全部楼层
  1. #include<stdio.h>

  2. int main()
  3. {
  4.    long double  a;
  5.    a=0.1234567890007899552122;
  6.    printf("=====%.22Lf\n",a);
  7.    printf("=====%.22llf\n",a);
  8.    return 0;
  9. }
复制代码

e:\>new
=====0.1234567890007899500000
=====0.1234567890007899500000

这两个都可以 ,但是 后面4位已经丢失了  失真了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 17:23:11 | 显示全部楼层
wp231957 发表于 2019-3-24 17:07
e:\>new
=====0.1234567890007899500000
=====0.1234567890007899500000

还是不行
1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 17:35:12 From FishC Mobile | 显示全部楼层
1.浮点数不能用==来比较
2.你是用的神马编译器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 17:39:05 | 显示全部楼层
Qt 自带的 MinGW 64位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 17:49:36 | 显示全部楼层
wp231957 发表于 2019-3-24 17:35
1.浮点数不能用==来比较
2.你是用的神马编译器

它会Warning ,但可以执行,如果1.111不加f就不执行if语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 17:53:29 From FishC Mobile | 显示全部楼层
浮点数不存在相等的概念,只能是差值达到一个满意度,就认为一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 17:55:56 | 显示全部楼层
wp231957 发表于 2019-3-24 17:53
浮点数不存在相等的概念,只能是差值达到一个满意度,就认为一样了

那为啥显示为0,我看网上说是Windows不支持long double的输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 18:50:06 | 显示全部楼层
终于搞定了,5楼的代码 在微软的c++10.0下 是能够通过的(单位电脑上)

但是 在家里的电脑上(gcc/mingw 8.1)  却是始终无法通过
下面的代码
  1. #include<stdio.h>

  2. int main()
  3. {
  4.    long double  a;
  5.    a=0.1234567890007899552122;
  6.    printf("=====%.22Lf\n",a);
  7.    printf("=====%.22llf\n",a);
  8.    return 0;
  9. }
复制代码


运行结果:
E:\>a
=====0.1234567890007899487737
=====0.0000000000000000000000
可见,gcc 是不支持%llf的,仅仅支持%Lf
而且在我电脑上 同样后面几位数据都失真了
下面是重中之重:
E:\>gcc -posix new.c    需要-posix参数 才是
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 18:54:34 | 显示全部楼层
My_A 发表于 2019-3-24 17:55
那为啥显示为0,我看网上说是Windows不支持long double的输出

这事和windows 无关   windows被你躺枪了
long double 是c99提出来的一种数据类型,那么只要编译器支持c99 就可以使用long double
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 19:00:17 | 显示全部楼层
wp231957 发表于 2019-3-24 18:50
终于搞定了,5楼的代码 在微软的c++10.0下 是能够通过的(单位电脑上)

但是 在家里的电脑上(gcc/mingw ...

-posix 是什么参数?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 19:07:45 | 显示全部楼层
你先看看管不管用吧,其实网上搜到的资料是使用-ansi 参数  但是实测无效
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 19:09:17 | 显示全部楼层    本楼为最佳答案   
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 19:12:55 | 显示全部楼层
wp231957 发表于 2019-3-24 19:07
你先看看管不管用吧,其实网上搜到的资料是使用-ansi 参数  但是实测无效

-posix 管用,但不知道甚么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-24 20:23:41 | 显示全部楼层
去官网溜达一圈   奈何E文太差   实在是找不到自己想知道的东西,以后再说吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-24 20:28:31 | 显示全部楼层
wp231957 发表于 2019-3-24 20:23
去官网溜达一圈   奈何E文太差   实在是找不到自己想知道的东西,以后再说吧

行吧,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 15:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表