質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

浮動小数点

浮動小数点は、コンピュータが数値を扱う際に実数を表現する方法のひとつです。 数値を、それぞれの桁の値が並んでいる仮数部と、小数点の場所を示す指数部で表します。

Q&A

解決済

3回答

2823閲覧

JavaScriptの+0と-0の違い

miu_ras

総合スコア902

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

浮動小数点

浮動小数点は、コンピュータが数値を扱う際に実数を表現する方法のひとつです。 数値を、それぞれの桁の値が並んでいる仮数部と、小数点の場所を示す指数部で表します。

1グッド

0クリップ

投稿2015/06/19 09:02

編集2015/06/19 09:03

リファレンスを見ると「+0」と「-0」が何度も明確に区別して書かれています。ECMAScriptの仕様書ですが。
ECMAScript 2015 Language Specification – ECMA-262 6th Edition

コンピュータですので仮数部が0で符号を+か-のどちらかにせざるを得ないので、内部表現として「+0」と「-0」が存在するのは分かります。しかし言語仕様としても「+0と-0」を区別して表現するものなのかと違和感がありました。

少なくとも、「内部表現として本来は+0と-0があるけど、実際には+0しか使わないよ」などとということはなさそうで、状況によって変わることがあることを示唆していると感じました。つまり、内部表現にとどまらない明確な違いが表出する場合があるはずと。

で、どうやったら違いが出るのかといくつか試したのですが

lang

1console.log(+0 === -0); 2console.log(parseInt("+0") === parseInt("-0"));

ではどちらもtrueになります。

lang

1console.log((+0).toString()); 2console.log((-0).toString());

はどちらも「0」になります。

なので、違いが分かりません。

質問1
・現実問題として「+0」になる場合と「-0」になる場合が明確に存在するのでしょうか?あるかもしれないしないかもしれない、という程度の話なのでしょうか?あるいは明確に「ない」のでしょうか?

質問2
・違いがあるとして、どのようにしたら違いを確認できますか?

よろしくお願いします。

NagaseTomohiko👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

以下の様な場合、違いが有ります。

lang

1alert(1/-0); 2alert(1/+0);

参考
−0 - Wikipedia 比較

投稿2015/06/19 09:18

編集2015/06/19 09:22
sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miu_ras

2015/06/19 09:25

おお。おおー。面白いですね。 console.log(1 / 0); // Infinity console.log(1 / +0); // Infinity console.log(1 / -0); // -Infinity こうして比較すると、「0」と「+0」は同一、「-0」と「+0」は違う、ということですね。 とにかく違いがあるということですね。面白かったです。 ありがとうございました
guest

0

+0と-0の違いは,数学の極限で出てきます.
sho_csさんの例を借りると,1/+0は「0に限りなく近い正の値」で1を割る,という意味になります.
正の値を正の値で割っているので答えは正です.
一方1/-0は「0に限りなく近い負の値」で1を割る,という意味になります.
正の値を負の値で割っているので,答えは負になります.
小学校の時にやった反比例のグラフを思い出していただくとわかりやすいと思います.→こういうの

投稿2015/06/19 09:34

編集2015/06/19 09:36
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miu_ras

2015/06/19 12:10

ありがとうございました
miu_ras

2015/06/22 05:32

そのご説明ですと、『「-0と+0」は「0ではない」』ということがおっしゃりたいのでしょうか?
guest

0

あとから見つけました。これが一番素直な確認方法かと思います。

lang

1Object.is(0, -0);

投稿2015/07/04 18:53

miu_ras

総合スコア902

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問