可能是浮点数精度问题?

环境

[Taichi] version 1.1.3, llvm 10.0.0, commit 1262a70a, linux, python 3.9.12
[Taichi] Starting on arch=x64

代码

import taichi as ti
ti.init(ti.cpu, cpu_max_num_threads=1)

box_length = 11

@ti.kernel
def test():
    for i in range(box_length ** 2 + 2):
        print(i, i / box_length ** 2, int(i / box_length ** 2))
test()

奇怪的运算结果是 : int(121 / 11 ** 2) = 0,但把box_length换成其他数字就没事了。应该怎么解决呢?谢谢大家!

1 Like

设置 ti.init(fast_math=False) 可以解决这个问题。不过这应该是 bug… @strongoier 看一下?

谢谢解答!

这个是 fast_math 的问题,因为 fast_matha / b 会变成 a * (1 / b)。通过 int(np.float32(121) * np.float32(1 / 121)) 可以检验出这个结果确实会是 0。

1 Like