<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> の数値は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IEEE 754</anchor>
の64ビット倍精度浮動小数点値です。
仕様書には、
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://java.sun.com/docs/books/jls/html/4.doc.html#9208" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://java.sun.com/docs/books/jls/html/4.doc.html#9208</anchor-external>
に概要があるからそれを参照せよと言っています。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IEEE</anchor> の仕様書は自由に無料で手に入るものじゃないからかな。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 次の特殊な値を持ちます:<ul><li>非数 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NaN</anchor>)</li><li>正の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">無限大</anchor></li><li>負の無限大</li><li>正の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">零</anchor></li><li>負の零</li></ul></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 数値に対して、加減乗除が定義されています。<dl><dt><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">+</anchor></code></dt><dd>加算</dd><dt><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></dt><dd>減算</dd><dt><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">*</anchor></code></dt><dd>乗算</dd><dt><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">div</anchor></code></dt><dd>浮動小数点除算 (IEEE 754)</dd><dt><code class="XPath"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">mod</anchor></code></dt><dd>切捨て除算剰余 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ECMAScript</anchor> や <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Java</anchor> の <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">%</anchor></code> と同じ; IEEE 754 は丸め除算剰余なので注意)</dd></dl></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <code class="XPathFunction" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">number()</anchor></code> による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">数値</anchor>への変換で<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>空白</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">whitespace</rt></rubyb>が定義に使われていますがその意味は規定されていません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath</anchor> の他の部分と同じく <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XML</anchor> の <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">S</anchor></code> なのでしょうか。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <code class="XPathFunction" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">string()</anchor></code> による<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">キャスト</anchor>について、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath 1.0</anchor> では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IEEE 754</anchor> の精度通りの値を整数または小数表現することを求めています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> は10進数で17桁くらい、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は4桁くらいの表現になります。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ToString</anchor> と同じみたいです。) <time>2013-09-29T07:53:34.800Z</time></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">17桁くらい = <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">倍精度浮動小数点数</anchor>の表現能力くらい</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> は小さな数だと<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指数表記</anchor>になります (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPath 1.0</anchor> 違反)。
一方 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> は小さくても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">小数</anchor>のままです。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ToString</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指数</anchor>になるので、
違う文字列化コードを通っているようです。 <time>2013-09-29T08:07:36.300Z</time></p></body></html>