GNU smalltalk(gst)中浮点值增加除以零错误

时间:2013-06-15 16:29:15

标签: macos smalltalk gnu-smalltalk

我使用端口在Mac上安装了gnu small talk。

sudo port install gst

版本为3.2.5

gst -v
GNU Smalltalk version 3.2.5
Copyright 2009 Free Software Foundation, Inc.
Written by Steve Byrne (sbb@gnu.org) and Paolo Bonzini (bonzini@gnu.org)

它似乎工作正常,但是当我测试浮点数时,我得到除零错误消息。

st> 123.323
Object: 1 error: The program attempted to divide a number by zero
ZeroDivide(Exception)>>signal (ExcHandling.st:254)
SmallInteger(Number)>>zeroDivide (SysExcept.st:1426)
Fraction>>setNumerator:setDenominator: (Fraction.st:485)
Fraction class>>numerator:denominator: (Fraction.st:66)
Fraction>>- (Fraction.st:151)
FloatD(Float)>>printOn:special: (Float.st:533)
FloatD(Float)>>printOn: (Float.st:436)
FloatD(Object)>>printString (Object.st:534)
FloatD(Object)>>printNl (Object.st:571)
st> 

我可以通过附加“e0”来绕过这个问题。

st> 123.323e0
123.323

但是,我仍然遇到一些涉及浮点数的数值运算的错误。

st> 1.1 sin
Object: 1 error: The program attempted to divide a number by zero
ZeroDivide(Exception)>>signal (ExcHandling.st:254)

有时它工作正常。

st> 3.14 sin
0.0016

这有什么问题?

2 个答案:

答案 0 :(得分:1)

根据a thread in a Smalltalk forum,这个问题是由使用 -pie 选项编译的 gst 引起的,这是许多 Linux 发行版的默认设置,也许在 Mac 端口也是如此。

要解决此问题,请使用 -no-pie 选项编译 gst:从 https://ftp.gnu.org/gnu/smalltalk/ 下载 gst 3.2.5,解压缩 tarball,然后编译安装

export CFLAGS='-no-pie'
export LDFLAGS='-no-pie'
./configure
make
sudo make install

此解决方案在我的 Linux Mint PC 上运行良好。

答案 1 :(得分:0)

我想我需要将e0附加到所有浮点数。

st> 1.1e0 sin
0.8912074

甚至只用e

st> 1.1e sin
0.8912074