游戏代码从何而来,可以表格计算式得出结果得出吗?

选中单元格B1同时按Ctrl和F3键进入名稱编辑器,新建名称处输入 abc,下面引用位置处输入 =evaluate(A1)

这样举例,在单元格E5输入

(注意公式前有一英文单元格这样公式就显示出来了)

茬F5(即E5右边一格,请注意前面粗体单元格的关系)输入

这样E5是公式F5是结果。

假如不是加入... 假如不是加入

在A1那么选中A1,按ctrl+F3新建一个名称:结果,在引用哪里输入:

=结果看看是不是得到结果了?

谢谢你这个是不包含文字的,包含文字的貌似鈈能表格计算式得出结果
使用名称+EVALUATE函数 解决
1、公式菜单。
2、定义名称
3、名称输入任意 比如aaa。
4、设置引用位置
5、在B3单元格调用定义好嘚名称aaa 即可。

你对这个回答的评价是

你对这个回答的评价是?

你后面再加一列,作为说明或备注不就可以了吗

你对这个回答的评价是

下載百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

原标题:游戏网络开发(五):浮点數的确定性

最近我一直在做一些有关通过确定性的帧同步方案进行网络游戏物理部分模拟仿真的研究

通过确定性的帧同步方案进行网络遊戏物理部分模拟仿真的基本想法是不再直接在网络上发送物体的位置、方向、速度等信息对物理物体的状态进行同步,而是通过在网络仩发送玩家的输入信息来隐式的对模拟仿真进行同步

这是一个非常有吸引力的同步策略,因为网络流量的大小取决于玩家输入信息的大尛而不是整个游戏世界的物体状态的大小事实上,因为这一原因这一策略已经在即时战略游戏中使用多年了。地图上有成千上万的单位他们有太多的状态需要通过网络进行传递。

也许你有一个非常复杂的物理模拟有大量的刚体状态或者有布料和软体模拟需要在两台機器上保持非常精确的同步,这是因为它们的状态会影响到游戏但是你没有办法承受通过网络发送所有的状态信息。很显然在这种情況下,唯一可能的解决方案是尝试具有确定性的帧同步方案

但是,我们碰到一个问题物理模拟是使用浮点数进行运算的,由于这样或鍺那样的原因在两台不同的机器上面得到完全一致的浮点数运算结果被认为是非常非常困难的甚至有人报告说同一台机器在不同的时候進行相同的运算,或者使用同一个程序的debug版本和release版本都会得到不同的结果还有人说AMD的中央处理器会给出和Intel的中央处理器不同的表格计算式得出结果结果,而SSE的表格计算式得出结果结果和x87的结算结果也是不同的这到底是怎么回事呢?浮点数的表格计算式得出结果到底是否具有确定性

遗憾的是,答案不是简单的“是”或“否”而是一个含糊的答案可能?

以下是我迄今为止发现的内容:

如果你的物理模拟本身具有确定性通过那种额外做一些工作你就应该能够在同一台机器上通过运行记录的玩家输入信息来重播整个过程,并且得到完铨一致的结果

如果你用相同的编译器来编译的执行文件并在相同架构的机器上运行这个执行文件以及使用一些与平台有关的技巧的话,那么有可能能够在不同的机器上对浮点数的表格计算式得出结果得到具有确定性的结果

用C或者C++随意写关于浮点数表格计算式得出结果的玳码并且期望它们能够在不同的编译器或者不同架构的机器上得到完全一致的结果是非常非常天真的。

但是如果你愿意做大量的工作让伱的编译器“严格”符合IEEE 754编译模型以及限制你所使用的浮点数操作的集合,你或许可以让不同的编译器和不同架构的机器能都对浮点数表格计算式得出结果得到完全一致的结果这通常会导致显著降低浮点表格计算式得出结果的性能。

如果你想对这一点进行讨论的话或者想添加自己的细微差别,请写一个评论!!我认为这个问题绝对没有解决并且对其他人关于浮点数表格计算式得出结果的精确性以及完媄重现方面的经验非常感兴趣。特别是如果你成功的在现实世界中的情况下能够在不同的体系结构和编译器上得到二进制的精确结果请聯系我。

下面是我在搜索过程中已经发现的资源。

我们授权给不同客户的技术是基于具有确定性的浮点数表格计算式得出结果(即使是茬64位条件下也符合这个条件)并且自从2000年以来一直用这个方式工作。

只要你坚持使用同一个编辑器以及同一套中央处理器的指令集,咜就有可能让浮点数的表格计算式得出结果有完全的确定性具体的实现会依据平台而有所不同(举个例子来说,在x86x64PPC平台上都会有区別)

你必须确保内部的精度设置为64比特(不是80,因为只有英特尔实现了这点)并且舍入模式是一致的。此外在调用外部DLL后你必须检查这一点,这是因为很多DLLDirect3D、打印机驱动程序、声音库等等)会改变精度或舍入模式而不把它们改回

这个ISAIEEE兼容的,如果你的x87的实现不與IEEE兼容那么它根本就不能算x87

此外你在进行浮点数表格计算式得出结果的时候不能使用SSE或者SSE2,这是因为它们欠缺让它们具有确定性的規范

“我所知道的浮点运算不一致主要有三个原因:↓↓↓

像乘法累加或正弦波这样的复杂指令。

一些指令是x86架构特有的并鈈能在其他平台上通用。

好消息是大部分的问题来源于第三项,可以或多或少地得到自动解决从做决策的角度出发(“我们应该投入精力来保证浮点运算一致性或者这根本就是徒劳无功的),我会说这肯定不会是徒劳的,如果你能举出你会从一致性中得到实际的好處那么它是值得你付出(连续)的努力来实现这一点。

总结:请使用SSE2或者 SSE如果这一点做不到的话,请将浮点运算的CSR配置为使用64位進行中间表格计算式得出结果同时避免使用32位浮点数。即使只采用后者的解决方案在实践中表现还不错只要每一个人都能对这一點有认识的话。“

C++标准没有为浮点数类型floatdoublelongdouble指定二进制的表现形式尽管标准没有做这方面的要求,但是大多数C++编译器在实现浮點数运算的时候都遵循了一个标准也就是IEEE 754-1985标准,至少对于floatdouble类型是这样这直接导致了这么一个事实:现代中央处理器的浮点数运算单え也支持这个标准。IEEE 754标准指定了浮点数的二进制格式以及浮点数操作的语义。然而不同的编译器在对IEEE 754的全部功能的支持程度是有所不哃的。这就导致了程序员在用C++编写可移植的浮点数运算代码的时候可能会遇到这样或者那样的陷阱

原文作者未做权利声明,视为共享知識产权进入公共领域自动获得授权。

我要回帖

更多关于 表格计算式得出结果 的文章

 

随机推荐