数值计算问题,请帮忙!(10分) ( 积分: 10 )

  • 主题发起人 主题发起人 Xylitol
  • 开始时间 开始时间
X

Xylitol

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
x:longint;
y:Currency;
z:Currency;
x:= strtoint('$'+s);//S的值为:208D256D 即把208D256D 转化为十进制。
y:=x*180;
z:=y/2147483648;
代码是想完成这样一个运算:先把一十六进制(四字节)的数转化为十进制,乘与180,再除于2的31次方(即2147483648),可结果总是溢出!无论y和z的类型为何,都是溢出!请问是什么原因?有什么解决的方法吗?结果应该是45.775270992486190071418774994053才对啊!
 
代码如下:
x:longint;
y:Currency;
z:Currency;
x:= strtoint('$'+s);//S的值为:208D256D 即把208D256D 转化为十进制。
y:=x*180;
z:=y/2147483648;
代码是想完成这样一个运算:先把一十六进制(四字节)的数转化为十进制,乘与180,再除于2的31次方(即2147483648),可结果总是溢出!无论y和z的类型为何,都是溢出!请问是什么原因?有什么解决的方法吗?结果应该是45.775270992486190071418774994053才对啊!
 
to:mikejiang
先谢谢你!我试过你的方法,结果为:45.7753。能不能把精度提高?假如我需要45.77527,该怎么办?
 
var
x: Real;
y: Real;
z: Real;
结果为
x = 546121069
y = 98301792420
z = 45.7753392029554
 
var
x: Int64;
y: Real;
z: Real;
也是一样的结果
 
感谢两位!已经给分了!
 
在此多谢两位的帮忙!
不过由此我倒想到了一个问题(虽然已经结贴,但是大家如果有兴趣不如来探讨一下)。
就是关于计算机计算精度和效率的问题,可能不同的机器会有不同的答案,但是在程序设计中如果遇到这类问题,有时还真不知道该怎么做。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
634
import
I
后退
顶部