PostScript:修复浮点数中的舍入错误
PostScript: Fixing rounding error in floating point number
我正在尝试制作一个带有标有数字的刻度线的轴。一切正常,除了为轴生成的最后一个数字是 0.099999 而不是 0.01。我已经从下面的代码中删除了线条图部分,但留下了生成数字的部分。这些是我从下面的代码中得到的数字:1.0、0.9、0.8、0.7、0.6、0.5、0.4、0.3、0.2、0.09999999(应该是 0.01)。无论如何,有没有舍入数字或以不同的方式计算数字来避免舍入错误?
/str 10 string def
/count 0 def
/totalUnits 1 def
/ticks 0.1 def
totalUnits ticks neg 0
{
/loopnum exch def
loopnum 10 str cvrs
/stringnumber exch def % string representing the number
/count count 0.1 add def
} for
如评论所述,您可以使用整数来避免浮点数的这种怪癖。
/str 10 string def
/count 0 def
/scaling .1 def
10 -1 1{
scaling mul
10 string cvs
%dup =
/stringnumber exch def
/count count 1 add def
} for
同样的舍入问题影响所有使用二进制浮点数表示的语言,因为小数 1/10 在其二进制表示中具有重复模式。这与给你 .333333... 的效果相同,表示十进制表示的 1/3。将这些数量相加会丢失底部的位(输入)值已被截断。
我正在尝试制作一个带有标有数字的刻度线的轴。一切正常,除了为轴生成的最后一个数字是 0.099999 而不是 0.01。我已经从下面的代码中删除了线条图部分,但留下了生成数字的部分。这些是我从下面的代码中得到的数字:1.0、0.9、0.8、0.7、0.6、0.5、0.4、0.3、0.2、0.09999999(应该是 0.01)。无论如何,有没有舍入数字或以不同的方式计算数字来避免舍入错误?
/str 10 string def
/count 0 def
/totalUnits 1 def
/ticks 0.1 def
totalUnits ticks neg 0
{
/loopnum exch def
loopnum 10 str cvrs
/stringnumber exch def % string representing the number
/count count 0.1 add def
} for
如评论所述,您可以使用整数来避免浮点数的这种怪癖。
/str 10 string def
/count 0 def
/scaling .1 def
10 -1 1{
scaling mul
10 string cvs
%dup =
/stringnumber exch def
/count count 1 add def
} for
同样的舍入问题影响所有使用二进制浮点数表示的语言,因为小数 1/10 在其二进制表示中具有重复模式。这与给你 .333333... 的效果相同,表示十进制表示的 1/3。将这些数量相加会丢失底部的位(输入)值已被截断。