我正在寻找一种方法让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
,但该函数似乎无法写入文件。
还有其他办法吗?
答案 0 :(得分:1)
将formattedPrint
的输出提供给format
或print
(具体取决于您的使用情况)。
答案 1 :(得分:0)
另一个选项,如果你想保证没有长字符串的完美精度,就是存储数字的二进制表示,按照你引用的在线转换。这可以使用MaxScript bit.floatAsInt
和bit.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"