NaN值

**NaN（Not a Number，非数）**是计算机科学中数值数据类型的一类值，表示未定义或不可表示的值。常在浮点数运算中使用。在Minecraft中属于浮点数值（坐标，亮度等）中可选的一种数值。Minecraft在游戏中处理这种非常规值时自有一套独特的呈现形式。

NaN值可以在NBT的整值数据类型，浮点数据类型中填写，属于NBT中一个可设置值，通常NaN值会当作数值0处理，NaN在游戏中NaN值从未使用，因为它表示未定义的值。修改`Level.dat`中的一些值为NaN将导致在游戏中出现一些较小的特性。

在技术层面，NaN、Inf与任何数据类型（除了true）做强类型或弱类型比较均为false，且任何数和NaN做运算，结果都为NaN。
NaN从技术层面上只有这些特性，因此本条目主要探究nan值在游戏中所呈现的特性。

## 将NaN值应用到一些值上

### 坐标

在Java版1.4.2至1.5.2，玩家可以通过/tp来传送值为“NaN”的地方。

随着版本的更新，在Java版1.6.1版本以后，无法再通过命令/tp传送至NaN处了（但是用NBT编辑器仍旧可以）。1.9以后该方法彻底失效，传送到NaN处会现出“非法位置”而被踢出。

#### X/Z轴

当传送到X轴时，若云在“流畅”模式下，会出现条纹状、无限长的云。但是云仍能够正常飘动。在这里/give自己不了物品，投掷物品也无法渲染出实体。下面则是空荡荡的蓝色虚空。并且，接触到y=0时，可能出现“黑曜石柱”(见Beta 1.8)

在Z轴NaN时则不一样，云不会飘动。可能因为云向X轴飘动。若XZ轴都为NaN，则云不会渲染。可能因为云无限拉伸而导致无法渲染。

在“高品质”模式下，云不可见。这代表只有诡异的虚空、天空和太阳与月亮存在。

按F5的时候，玩家的模型会消失。物品栏中的玩家模型也是一片漆黑（无论是什么，只要其中一个值为NaN）。在手臂中，若区块加载则手臂能正常显示；但区块没有加载，尽管在第一人称中可显示手臂，但是手臂是纯黑的。

但依旧可以正确返回其正确世界。

#### Y轴

若Y轴为NaN，玩家在方块中时视角中会出现“方块材质"(生存模式中玩家在方块中窒息的视角)。不过，若传送至x/z轴比较远的地方，会暂时出现天空，一会就会变为方块材质。可能是因为区块的加载而致。生物群系类型能正确在调试屏幕显示。

### 旋转角度

若将玩家NBT中决定实体旋转角度的**Rotation**值中偏转角，俯仰角（x,y）角度改为NaN，则玩家的屏幕上只有空荡荡的“虚空”存在。
"虚空"类似于在最低能见度下的天空。屏幕上所有的方块、实体与粒子皆无法显示，但是若视角X轴被改为NaN时仍可以与实体交互，而方块也能够正常放置、破坏。然而在第二/三人称中玩家的模型隐形，物品栏中玩家模型也是如此。玩家无法走动，只可跳跃或飞行改变y轴。

玩家无法走动。

若将视角Y轴改为NaN，玩家可以正常走动跳跃而改变xyz轴中的一个，但无法放置、破坏方块。这时二/三人称视角玩家模型也是隐形的，但是物品栏中的玩家模型则不同，可以显示玩家模型，不过头部与左手臂无法渲染。

若X轴与Y轴都改为NaN，玩家依旧可以正常跳跃。

### 飞行速度

将玩家的飞行速度**flySpeed**值改为NaN后，玩家的第二、三人称视角隐形。物品栏也如此。

玩家将在进入飞行模式后可以“穿墙”。无法放置方块，但可以破坏方块。届时所有的生物都会被视为"假生物"，生物会在玩家飞行时立刻被冻结，只能转换视角方向，但无法走动，也并不会朝向玩家。

玩家不能改变自己的X/Z轴。但是利用tp指令可以改变，接触到了地面（调试屏幕中g变为true）则玩家可继续改变自己的X/Z轴，正常步行，正常放置方块，这时生物也会立即解冻。

### 步行速度

将步行速度**walkSpeed**值更为NaN后重进世界，会在一瞬间闪出"真实视角"，然后切换成"虚空"视角，与Rotation值大体相似。有趣的是，若此值更为正常的值再进入世界，则还是只有"虚空"视角，需要重开游戏进入世界才可恢复正常。但与Rotation Y视角不同，在日出或日落时walkSpeed改为NaN可以发现往东/西边的霞光颜色，但是Rotation Y轴改为NaN则看不到。

和上述飞行速度一样，玩家仍然能穿墙。第二、三人称视角与物品栏中的玩家模型也是隐形的。同样，玩家不能改变自己的X/Z轴，但是可以使用传送命令。虽说使用tp命令可以让玩家再次改变X/Z轴，但是一接触到地面，游戏就会立即停止响应，迫使玩家强制关闭游戏进程。

### 摔落距离

把摔落距离（**FallDistance**）改为NaN时，玩家将不再受到摔落带来的伤害，但这并不是持续的。若玩家攀爬梯子等可攀爬方块，则摔落距离会恢复为正常状态，意味着玩家还会受到摔落伤害。

### 食物饱和等级

食物饱和等级值（**foodSaturationLevel**）调为NaN，则玩家就算饱食度过低或为空时饥饿条也不抖动。

### 玩家总经验值

当玩家的总经验值（**xpP**）调为NaN，则经验条中不显示经验和等级，但仍能正确显示玩家在死亡屏幕上的分数（总经验）。

## options.txt的NaN

在1.6.1正式版后，出现了全面的options.txt选项。在该文件里修改一些值为NaN，则会产生一些影响。

如果将**fov**（视野）值改为NaN，则第二、三人称视角中的玩家模型将不可见。不过不同于Rotation、FlySpeed值的NaN，物品栏内的玩家模型正常渲染。

**sound**、**music**值改为NaN，那么游戏设置中它显示为0%，但实际上游戏声音仍正常发出，包括游戏音乐。

**mouseSensitivity**（鼠标灵敏度）值改为NaN，游戏设置中会显示为0%。正常情况下，0%的鼠标灵敏度会显示为 \*yawn\* 的字样，然而为"NaN%"的鼠标灵敏度则会显示为0%。在进入游戏后，Rotation的两个值都会被改为NaN，也就是玩家视角一片虚无，无论将鼠标灵敏度值改为正常的值都无法恢复正常，除非在NBT编辑器修改玩家数据。

**gamma**（伽马）值为NaN，则世界一片黑暗，没有光照。光照方块也拯救不了，但是会受到雾的影响。

其他布尔值改为NaN，则会被视为"false"。但是**difficulty**（难度）值则不同。该值如果为0则为和平模式，而改为NaN则为普通模式。

## 历代版本的NaN

### Classic时期

#### Classic 0.25 Survival Test

该版本中，将单坐标轴（X/Z）或双坐标轴（X=Z）传送至NaN处，世界无法渲染，但玩家总是在Y=36处受到摔落伤害，同时导致玩家的手臂无法渲染。将Y轴改为NaN，则导致玩家困在"岩浆"内——视角被更改为红色，且每秒会扣除10滴血（相当于五格血），两秒可导致玩家死亡。同时该效果影响至正常世界。如果传送至NaN再传送至正常坐标不会渲染世界，并且向被NaN影响过的坐标轴移动一段距离后会导致玩家掉入虚空（直至Y=0处显现岩浆，但无法烧到玩家，只会闪一下就会继续穿墙掉落），如果这时再调用一次Retrowrapper则导致玩家的坐标再次变为NaN，并导致摔落伤害（双坐标轴同理）。

### Indev时期

#### Indev 20100206

在Indev 20100206中，X/Z轴传送至NaN则无法渲染世界。但Y=30下依旧会出现水，玩家会掉落在里面，视角中的“水”也会出现，若回到正常坐标值则依旧不渲染世界并导致穿墙现象（在X/Z=0时不会，但被NaN影响过的坐标轴会，不过传送至负坐标轴则不会出现穿墙效果），双坐标轴同理。Y轴坐标回到正常值可正常渲染世界。

X,Z轴与Y轴一样，打开F5（降雨）会导致未响应，导致穿墙的出现。不过和c0.25\_05st不一样的是；Y轴不会再困在"岩浆"，NaN回到正常值后调用Retrowrapper不会导致NaN复现。

在NaN处保存等轴截图会使地图亮度变亮（尤其是蓝色部分，即海洋部分）。

### Infdev时期

#### Infdev 20100227

在该版本中，如果X，Z，XZ传送至NaN再回到正常值坐标而不渲染世界继续掉落，而Y轴传送至NaN再返回则正常渲染世界，但是会穿墙。类似于之前的Indev 20100206。

#### Infdev 20100330

该版本中的NaN现象导致云无限拉伸。现象于X/Z = NaN时会出现云无限拉伸的情况，但是XZ=NaN则不会发生。这类似于后来的1.4.7版本中NaN现象。

#### Infdev 20100616~Beta 1.7.3

在Infdev 20100616中，传送至NaN会导致卡顿现象出现。617-2版本中，由于负Y轴坐标的岩浆被彻底移除，虚空彻底成为了虚无。617-3版本中，“假方块”在NaN处出现。

起初，Retrowrapper传送至NaN坐标也会起到一定的效果。然而到了Inf625-2，若使用RetroWrapper将X/Z/XZ轴传送至NaN，则世界依旧能够正常渲染，但是玩家将会穿墙掉落（无视水或岩浆的浮力）。玩家在这些版本传送至NaN，实际上传送到了X/Z/XZ为0的地方。这是因为用Retrowrapper传送至NaN的话游戏会回到上次的位置，但是上次的位置并不会保存到NBT。

在RW中，Y轴改为NaN则会出现一些现象；F5的第三人称消失，而物品栏内的玩家模型没有消失（X、Z、XZ轴都是直接消失的），尽管玩家可以飞行，但无法上下飞行。并出现碰撞箱偏移、无法打击生物的现象。

上述两段的现象，在RW停止支持的版本结束（1.0.0）后就要么修改游戏或使用外部软件才能做到。但是在Inf625-2及以后的版本使用NBT编辑器仍旧可以传送至NaN，包括使用外部Mod（如单人游戏命令）。