小编kle*_*ite的帖子

如何在双精度算术中正确舍入到最接近的整数

我必须使用 Python3(PyPy 实现)分析大量数据,其中我对相当大的浮点数进行一些操作,并且必须检查结果是否足够接近整数。

举个例子,假设我正在生成随机的数字对,并检查它们是否形成毕达哥拉斯三元组(是具有整数边的直角三角形的边):

from math import hypot
from pprint import pprint
from random import randrange
from time import time

def gen_rand_tuples(start, stop, amount):
    '''
    Generates random integer pairs and converts them to tuples of floats.
    '''
    for _ in range(amount):
        yield (float(randrange(start, stop)), float(randrange(start, stop)))

t0 = time()
## Results are those pairs that results in integer hypothenuses, or
## at least very close, to within 1e-12.
results = [t for t in gen_rand_tuples(1, 2**32, 10_000_000) if …
Run Code Online (Sandbox Code Playgroud)

python precision pypy floating-accuracy double-double-arithmetic

6
推荐指数
1
解决办法
213
查看次数

如何在 Pharo/Squeak 中读取 WindowsProcess 的标准输入并写入标准输出?

我找到了一种在Windows 10中异步运行命令的方法,现在我尝试通过其标准输入、标准输出与其进行通信。我是通过 Python 完成的 - 我运行了 python.exe 进程,向其发送了一个类似“print(1+9)”的字符串,并得到了结果 - “10”。所以,现在我尝试在 Pharo 或 Squeak 中重复这个简单的任务:

p := WindowsProcess command: 'c:\python38\python.exe'.

a := p accessor.

in := a getStdIn.
out := a getStdOut.

inHnd := a getStdInHandle.
outHnd := a getStdOutHandle.
Run Code Online (Sandbox Code Playgroud)

那么,下一个问题是 - 如何处理in, out, inHnd, outHnd?我的感觉是,我可以从它们读取/写入,但我得到的例外是ininHnd-它们是ByteArray,所以无法调用类似的东西nextPutAll:next:对它们进行调用。如何与这个进程进行通信?

stdin smalltalk stdout squeak pharo

5
推荐指数
0
解决办法
201
查看次数

推出新的 Pharo 版本。我该如何处理旧图像?

我注意到 Pharo 9已于上个月(2021 年 7 月)发布。我有几个 Pharo 8 映像,其中包含我在 Pharo 学习编程时创建的包和类。是否可以将旧映像更新为新版本,或者标准方法是仅文件输出/文件输入,或者使用像 Iceberg 这样的更改跟踪工具在映像之间迁移我的包?

version-control smalltalk change-tracking pharo monticello

3
推荐指数
1
解决办法
346
查看次数

Speedwise,Pharo 与 Python3 相比如何?

我在编程方面没有太多经验,但我知道一点 Python3,现在我正在迈出我学习 Pharo 的第一步。我仍然不熟悉面向对象编程或类浏览器,但我已经阅读了 ProfStef 教程,并且我正在 Playground 上玩小程序,以熟悉语法。

我好奇的第一件事是这两种语言在速度方面的比较,因为我在某处读到 Pharo 内置了 JIT 编译器。 所以我用两种语言写了一个异想天开的脚本,生成了 800 万个数字,过滤其中的1/3,对每个计算1/sqrt(x),将结果相加,重复该过程一百次,每次稍微改变间隔,最后再将结果相加,并对整个过程进行计时. 不是一个合适的基准,只是一个获得数量级估计的练习,但我试图让两个版本尽可能相似。

Python 3 版本:

import time, math

mega = lambda n: sum([1/math.sqrt(1 + i + n) for i in range(8000000) if (i + 1) // 3 == 0])
start = time.time()
print(sum([mega(n + 1) for n in range(100)]))
stop = time.time() - start
print(stop)
Run Code Online (Sandbox Code Playgroud)

Python 3.8.5 的结果(默认,2020 年 7 月 28 日,12:59:40):

34.7701230607214
52.75216603279114
Run Code Online (Sandbox Code Playgroud)

Pharo 8 版本:

| mega range start stop |.

range …
Run Code Online (Sandbox Code Playgroud)

python performance benchmarking smalltalk pharo

2
推荐指数
1
解决办法
351
查看次数

当没有指定路径时,Pharo 默认保存的文件在哪里?

我目前正在通过Pharo MOOC学习 Pharo ,在讲座“3.8 流概述”中,我们展示了以下用于创建文件的流操作示例:

| stream |
stream := 'hello.txt' asFileReference writeStream.
stream nextPutAll: 'Hello Pharo!'.
stream close.
Run Code Online (Sandbox Code Playgroud)

我在操场上执行了这个代码片段,然后我查看了安装 Pharo 的文件夹,在 Ubuntu 20.04 中的 ~/src/pharolauncher 下,检查文件是否已创建,但它在文件夹或其子文件夹中没有任何位置。

smalltalk file save pharo

2
推荐指数
1
解决办法
69
查看次数