MAXScript:以完全精度将数字写入文件?

时间:2018-01-31 10:02:45

标签: floating-point precision maxscript

我正在寻找一种方法让3ds Max以完整的精度将值写入文件? 我意识到Max在其内部表示中使用32位浮点数,但它输出到文件的值通常看起来精度稍低。

似乎能够将值写入文件的唯一函数是format "%" value to: f此函数输出的值看起来像0.48729
我正在使用this converter检查此数字的浮点表示,并以十六进制显示0x3ef97e13 如果我尝试使用其最低有效位数,我可以得到
0.487291 = 0x3ef97e35
0.487292 = 0x3ef97e56
0.487293 = 0x3ef97e78
很明显,即使32位数字Max hold也比使用此函数输出的精度更高。

我发现的唯一一个更好的精度是使用formattedprint,但该函数似乎无法写入文件。

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

formattedPrint的输出提供给formatprint(具体取决于您的使用情况)。

答案 1 :(得分:0)

另一个选项,如果你想保证没有长字符串的完美精度,就是存储数字的二进制表示,按照你引用的在线转换。这可以使用MaxScript bit.floatAsIntbit.intAsFloat

每当你写一个浮点值时,重新解释float-> int中的位。每当您读取相同的值时,重新解释int-> float中的位。这是一个例子:

d = 1.0 / 3.0
w = bit.floatAsInt d -- when writing to disk
r = bit.intAsFloat w -- when reading from disk
d==r -- verify as identical

否则,您需要通过formattedPrint d format:".30f"

大约30个小数位