ホームページ ウェブフロントエンド jsチュートリアル me_javascript スキルで JavaScript の浮動小数点精度を学びましょう

me_javascript スキルで JavaScript の浮動小数点精度を学びましょう

May 16, 2016 pm 03:32 PM
javascript 浮動小数点数

ほとんどのプログラミング言語には複数の数値データ型がありますが、JavaScript には 1 つしかありません。 typeof 演算子を使用して数値の型を確認できます。整数であるか浮動小数点数であるかに関係なく、JavaScript は単純に数値として分類します。

typeof 17; //number
typeof 98.6; //number
typeof -21.3; //number
ログイン後にコピー

実際、JavaScript の数値はすべて倍精度浮動小数点数です。これらは、IEEE754 標準で指定されている 64 ビットでエンコードされた数値 (「double」) です。この事実を見て、JavaScript が整数をどのように表現するのか疑問に思われる場合は、倍精度浮動小数点数は最大 53 桁の精度の整数を完全に表現できることを思い出してください。 –9 007 199 254 740 992 (-253) から 9 007 199 254 740 992 (253) までのすべての整数は、有効な倍精度浮動小数点数です。したがって、JavaScript には明らかな整数型が存在しないにもかかわらず、整数演算は完全に可能です。
ほとんどの算術演算子は、整数、実数、またはその両方の組み合わせを使用して計算を実行できます。

0.1 * 0.9; //0.19
-99 + 100; //1
21- 12.3; //8.7
2.5 /5; //0.5
21%8; //5
ログイン後にコピー

ただし、ビット算術演算子は特殊です。 JavaScript はオペランドを浮動小数点数として直接操作しませんが、操作を実行する前にオペランドを暗黙的に 32 ビット整数に変換します。 (正確には、整数の 32 ビット ビッグ エンディアン 2 の補数表現に変換されます。) ビットごとの OR 式を例に挙げます。

8|1; //9
ログイン後にコピー

一見単純な式でも、実際には操作を完了するにはいくつかの手順が必要です。前に述べたように、JavaScript の数値 8 と 1 は両方とも倍精度浮動小数点数です。ただし、32 ビット 0 と 1 のシーケンスである 32 ビット整数として表すこともできます。整数 8 は、次のように 32 ビットのバイナリ シーケンスとして表されます。

0000000000000000000000000001000

数値型の toString メソッドを使用して自分で表示することもできます。

(8).toString(2) //"1000"

toString メソッドのパラメータは、変換基数を指定します。この例は基数 2 (つまりバイナリ) で表されます。結果の値では、左側の余分な 0 (ビット) が最終値に影響しないため省略されます。

整数 1 は、次のように 32 ビット バイナリとして表されます。

00000000000000000000000000000001 ビットごとの OR 式は 2 つのビット シーケンスを結合します。演算に含まれる 2 ビットのいずれか 1 つが 1 である限り、演算結果のビットは 1 になります。結果をビットパターンで表現すると以下のようになります:

0000000000000000000000000001001 このシーケンスは整数 9 を表します。標準ライブラリ関数 parseInt を使用して検証することもできますが、基数 2 も使用します:

parseInt("1000", 2); //9
ログイン後にコピー
(繰り返しになりますが、先頭の 0 ビットは演算の結果に影響を与えないため不要です。)
すべてのビット演算子は同じように機能します。オペランドを整数に変換し、整数ビット パターンを使用して演算を実行し、最後に結果を標準の JavaScript 浮動小数点数に変換します。通常、JavaScript エンジンはこれらの変換を実行するために追加の作業を行う必要があります。数値は浮動小数点数として格納されるため、整数に変換してから浮動小数点数に戻す必要があります。ただし、場合によっては、算術式や変数さえも整数でしか操作できない場合があり、最適化コンパイラーはこれらの状況を推測し、冗長な変換を避けるために数値を内部的に整数として格納することがあります。


浮動小数点数に関する最後の警告は、浮動小数点数には常に注意する必要があるということです。浮動小数点数はよく知られているように思えるかもしれませんが、不正確であることで有名です。一見単純な算術演算でも、誤った結果が生成されることがあります。

0.1 0.2 0.300000000000004 64 ビットの精度は非常に高いですが、倍精度浮動小数点数は限られた数値セットのみを表すことができ、実数セット全体を表すことはできません。浮動小数点演算は、最も近い表現可能な実数に丸められた近似結果のみを生成できます。一連の操作を実行すると、丸め誤差が蓄積され、結果の精度がますます低くなります。丸めによって、通常予期される算術の法則から予期しない逸脱が生じる可能性もあります。たとえば、実数は結合法則を満たします。これは、任意の実数 x、y、z、(x y) z = x (y z) が常に満たされることを意味します。

ただし、浮動小数点数の場合は、常にそうとは限りません。

(0.1+0.2)+0.3; //0.60000000000000001
0.1+(0.2+ 0.3); //0.6

ログイン後にコピー
浮動小数点数は精度とパフォーマンスのトレードオフになります。精度を重視する場合は、浮動小数点数の制限に注意してください。効率的な解決策は、整数は丸めなしで表現されるため、可能な限り整数値の算術演算を使用することです。通貨関連の計算を実行する場合、プログラマは多くの場合、計算を整数として実行できるように、計算を実行する前に値を最小通貨単位に比例変換します。たとえば、上記の計算が米ドルである場合、それをセントの整数表現に変換できます。

整数演算の場合、丸め誤差を心配する必要はありませんが、すべての計算は -253 から 253 までの整数にのみ適用されることに注意する必要があります。

ヒント

  • JavaScript の数値はすべて倍精度浮動小数点数です。
  • JavaScript の整数は倍精度浮動小数点数のサブセットにすぎず、別個のデータ型ではありません
  • ビット演算子は、数値を 32 ビットの符号付き整数として扱います。

上記は JavaScript における浮動小数点数の紹介であり、浮動小数点演算の精度トラップに常に注意する必要があります。この記事が皆さんの学習に役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

PHPの浮動小数点数の丸め方法 PHPの浮動小数点数の丸め方法 Mar 21, 2024 am 09:21 AM

この記事では、PHP の浮動小数点数の四捨五入方法について詳しく解説しますが、非常に実践的だと編集者が考えたので、参考として共有しますので、この記事を読んで何かを得ることができれば幸いです。 PHP 浮動小数点丸めの概要 コンピュータでは、浮動小数点数は小数点とそれに続く指数として表されますが、多くの場合、限られた桁数の近似値で格納されます。浮動小数点数を特定の精度に丸める必要がある場合、それを行う方法がいくつかあります。方法 1.round() 関数round() 関数は、浮動小数点数を最も近い整数に丸めます。浮動小数点数とオプションの精度パラメータを受け入れます。例: $num=1.55;echoround($num);//出力: 2echoround($num,1)

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

PHP 浮動小数点計算エラーの原因と回避方法 PHP 浮動小数点計算エラーの原因と回避方法 Feb 27, 2024 pm 06:33 PM

人気のサーバーサイド スクリプト言語である PHP では、浮動小数点計算を実行するときに精度の低下や計算エラーの問題が頻繁に発生し、プログラムの精度と安定性に影響を与える可能性があります。この記事では、PHP 浮動小数点計算エラーの原因を調査し、いくつかの回避戦略を提案し、参考として具体的なコード例を示します。 1. PHP 浮動小数点計算エラーの理由 コンピューターでは、浮動小数点数は 2 進数形式で表現されますが、2 進数ではすべての 10 進数を正確に表現できないため、浮動小数点数が不正確になります。

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

See all articles