Macos GNU smalltalk(gst)中的浮点上升除以零错误

Macos GNU smalltalk(gst)中的浮点上升除以零错误,macos,smalltalk,gnu-smalltalk,Macos,Smalltalk,Gnu Smalltalk,我使用端口在我的Mac上安装了gnu Smalltalk 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

我使用端口在我的Mac上安装了gnu Smalltalk

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> 1.1 sin
Object: 1 error: The program attempted to divide a number by zero
ZeroDivide(Exception)>>signal (ExcHandling.st:254)
st> 1.1e0 sin
0.8912074
有时它工作得很好

st> 3.14 sin
0.0016

这个怎么了

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

st> 1.1 sin
Object: 1 error: The program attempted to divide a number by zero
ZeroDivide(Exception)>>signal (ExcHandling.st:254)
st> 1.1e0 sin
0.8912074
甚至只有e

st> 1.1e sin
0.8912074
根据,这个问题是由使用
-pie
选项编译的gst引起的,这是许多Linux发行版中的默认选项,也可能是在Mac端口中

要解决此问题,请使用
-no pie
选项编译gst:从下载gst 3.2.5,提取tarball,然后编译并安装

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

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

如果尝试使用后缀d而不是e会发生什么?@aka.nice:1d1或1d3->确定,1d0->崩溃1d->crashI询问,因为e指数将创建单精度浮点(浮动),而d将创建双精度(浮动)。如果您不提供指数(堆栈转储上有一个浮动),则默认为浮动。所以这听起来像是printOn:special的一个错误行为:它以双精度出现。。。