由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问个double和long double的问题
相关主题
请教:double比float算起来还快?一个小问题
瓶颈在哪儿?double转换int的问题
《Intel® 64 and IA-32体系结构:软件开发人员手册》文字版[PDF]嵌入式编程问题
在图像算法领域,纯java没戏,用java和c++混合编程很恶心C++多线程和硬件的关系
黑c++的人是不是坐井观天?请大牛们帮忙看一段并行c++代码的效率问题
round function in mathfunctional programming?
震惊:java 的矩阵操作比 c++ 快?c++这种语言注定了会越做越小
C++并发和Java并发有多大区别?java在图像分析领域,就是一个扶不起的阿斗
相关话题的讨论汇总
话题: double话题: long话题: x86话题: sse话题: sse3
进入Programming版参与讨论
1 (共1页)
l*********i
发帖数: 483
1
偶有个做计算的c写的函数库,定义的时候所有的变量类型都是double,但是
因为计算精度的问题,现在想把所有的变量都变成long double,除了挨个改源文件
之外,有没有什么简单点的方法呢(比如compile的时候有没有什么特殊的flags
之类能干这个的)?
系统是64位的linux, compiler有gcc 4.2和icc 10.1(不知道是什么,貌似
gcc比icc慢不少,所以最后可能会用icc)
y*w
发帖数: 238
2
用MACRO就可以了
如果一次性的改,用sed也可以
t****t
发帖数: 6806
3
x86吗? 注意x86上, 计算一律是80位的, double和long double的区别应该就是变量保
留多少

【在 l*********i 的大作中提到】
: 偶有个做计算的c写的函数库,定义的时候所有的变量类型都是double,但是
: 因为计算精度的问题,现在想把所有的变量都变成long double,除了挨个改源文件
: 之外,有没有什么简单点的方法呢(比如compile的时候有没有什么特殊的flags
: 之类能干这个的)?
: 系统是64位的linux, compiler有gcc 4.2和icc 10.1(不知道是什么,貌似
: gcc比icc慢不少,所以最后可能会用icc)

l*********i
发帖数: 483
4
是x86_64,Intel Core 2 duo,计算一律是80位是啥意思啊,如果一个变
量i (double或者long double)经过很多步算术运算,是说仅仅是最后一步的
的数值的保留位数不同么?

【在 t****t 的大作中提到】
: x86吗? 注意x86上, 计算一律是80位的, double和long double的区别应该就是变量保
: 留多少

l*********i
发帖数: 483
5
啊,太感谢了,果然,用#define double long double好像就搞定了。

【在 y*w 的大作中提到】
: 用MACRO就可以了
: 如果一次性的改,用sed也可以

t****t
发帖数: 6806
6
就是说,x86/x86_64的CPU,浮点运算单元就是80位的
你变量可以是96位或者128位,但是后面的啥都没有

【在 l*********i 的大作中提到】
: 啊,太感谢了,果然,用#define double long double好像就搞定了。
c*****e
发帖数: 8
7
用了这个宏就不用修改函数了?比方说sqrt不用改成sqrtl?
long double sqrt(long double x); [C++ only]
long double sqrtl(long double x); [optional]
C++里面还是用sqrt,但是一般的C里面还要改吗?谢谢!

【在 l*********i 的大作中提到】
: 啊,太感谢了,果然,用#define double long double好像就搞定了。
l*********i
发帖数: 483
8
哦,原来是这样,长知识了,呵呵。

【在 t****t 的大作中提到】
: 就是说,x86/x86_64的CPU,浮点运算单元就是80位的
: 你变量可以是96位或者128位,但是后面的啥都没有

l*********i
发帖数: 483
9
不好意思,再请教一下,我看到gcc在x86_64下面缺省的-mfpmath的flag的设置
是sse,在网上google到这么一段:
"sse- take a benefit of SSE2 (SSE3) instruction set (Streaming SIMD
Extension, SIMD - Single Instruction Multiple Data), a default mode for x86-
64 processors, to use this option one should also enable SSE and SSE2 (SSE3)
instruction set to be used in machine code, the FP computations are done
simultaniously on a 16 new 128bit registers (xmm0-xmm15), each of xmm
register makes the same operation on 2 doubles (or 4 floats), the re

【在 t****t 的大作中提到】
: 就是说,x86/x86_64的CPU,浮点运算单元就是80位的
: 你变量可以是96位或者128位,但是后面的啥都没有

t****t
发帖数: 6806
10
你再仔细读一遍, 我觉得这个说得很清楚
SSEx做的是64b或32b的浮点运算,比x87的80位更少
所谓128位是说可以两个64b或者4个32b一起运算,当然会快一些。

x86-
SSE3)
is

【在 l*********i 的大作中提到】
: 不好意思,再请教一下,我看到gcc在x86_64下面缺省的-mfpmath的flag的设置
: 是sse,在网上google到这么一段:
: "sse- take a benefit of SSE2 (SSE3) instruction set (Streaming SIMD
: Extension, SIMD - Single Instruction Multiple Data), a default mode for x86-
: 64 processors, to use this option one should also enable SSE and SSE2 (SSE3)
: instruction set to be used in machine code, the FP computations are done
: simultaniously on a 16 new 128bit registers (xmm0-xmm15), each of xmm
: register makes the same operation on 2 doubles (or 4 floats), the re

l*********i
发帖数: 483
11
多谢多谢,也就是说如果我比较在意精度,又不想折腾去搞那个无限精度
库的话,最好的选择是用long double再选择x87的FPU?

【在 t****t 的大作中提到】
: 你再仔细读一遍, 我觉得这个说得很清楚
: SSEx做的是64b或32b的浮点运算,比x87的80位更少
: 所谓128位是说可以两个64b或者4个32b一起运算,当然会快一些。
:
: x86-
: SSE3)
: is

1 (共1页)
进入Programming版参与讨论
相关主题
java在图像分析领域,就是一个扶不起的阿斗黑c++的人是不是坐井观天?
请教C++classround function in math
我是一个线程 (转载)震惊:java 的矩阵操作比 c++ 快?
讨论程序语言没什么意思,functional programming还是不错的C++并发和Java并发有多大区别?
请教:double比float算起来还快?一个小问题
瓶颈在哪儿?double转换int的问题
《Intel® 64 and IA-32体系结构:软件开发人员手册》文字版[PDF]嵌入式编程问题
在图像算法领域,纯java没戏,用java和c++混合编程很恶心C++多线程和硬件的关系
相关话题的讨论汇总
话题: double话题: long话题: x86话题: sse话题: sse3