1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜExcelのSIN(PI())は0にならないのか?

Last updated at Posted at 2025-10-20

浮動小数点とS-Calcの精度保障の違いを解説 〜ExcelとC#の計算を比較〜


はじめに

Excelは日常業務に欠かせない優れた表計算ソフトですが、
「数学的に厳密な値」を求める時には注意が必要です。

次の計算をしてみましょう。

image.png

結果は:

image.png

一見ほぼ0ですが、厳密には0ではありません。
今回はこの差がどこから生まれるのか、
そして私が開発したWindows向け関数電卓ソフト S-Calc ではなぜ正確に0という解が得られるのかを解説します。


Excel内部でのPI()の扱い

Excelは IEEE754倍精度浮動小数点(double型) を用いて計算しています。
PI()は有限桁の近似値として格納されており、実際の値は次のようになります。

image.png

そのため、先に貼り付けた画像のような計算結果となり、厳密な0にはなりません。

これはバグではなく仕様であり、
浮動小数点を用いる以上、どの環境でも起こりうる現象です。


S-Calcの仕組み - 「数値演算」ではなく「式の評価」

一方、S-Calcは.NET向けのライブラリxFunc.Mathを使用しています。
このライブラリは単なる数値演算ライブラリではなく、
式(Expression)を解析して評価(Evaluate)する仕組みを備えています。

つまり、S-Calcがsin(π)を処理する際は、
次のような流れで動作しています。

ユーザ入力:sin(π)
↓
パーサが式を解析 → sin(SymbolicConstant.PI)
↓
シンボリック評価(symbolic evaluation)を実施
↓
結果:0

「symbolic(シンボリック)」とは何か?

「symbolic evaluation(記号的評価)」とは、
数値をそのまま評価するのではなく、記号(symbol)として保持・処理する手法です。

たとえば、次のように考えると分かりやすいです。

数値的評価(numeric) 記号的評価(symbolic)
π 3.115926535...(近似値) π(記号として保持)
sin(π) 1.22E-16(誤差) 0(理論的に正しい)
sin(π/2) 1.0(近似) 1 (理論値として保持)

.NETやC#標準との違い

C#や.NETには、標準で「symbolic evaluation」の機能はありません。
つまり、Math.Sin(Math.PI)のような記述では必ず浮動小数点誤差を伴います。

double result = Math.Sin(Math.PI);
Console.WriteLine(result); // 1.2246467991473532E-16

これに対し、xFunc.Mathは
"数値を扱う"のではなく、"式を構文木(expression tree)として解析・評価する" ことで、
定数や関数を抽象的(symbolic)に扱えます。

この仕組みを利用することで、S-Calcではsin(π)を「式」として正確に0に簡約できるのです。


精度保障の比較

項目 Excel S-Calc
πの扱い 数値(近似値) 記号(symbolic constant)
計算方式 浮動小数点演算 数式解析+記号的評価
精度 約15~16桁 理論的に正確(誤差なし)
目的 表計算・統計 数学・理系計算・研究

実際の比較

Excel S-Calc
Excelでの結果 S-Calcでの結果
  • Excel : =SIN(PI())1.22514845490862E-16
  • S-Calc : sin(π)0

使い分けの考え方

用途 向いているツール
データ集計・表計算 Excel
理論計算・関数解析・誤差を嫌う計算 S-Calc

Excelは現場作業向け、
S-Calcは数式や理論ベースの研究・開発向けです。


まとめ

  • Excelの誤差は 「計算ミス」ではなく「浮動小数点の限界」 によるもの
  • S-Calcは数式を解析・評価するため、理論的に正しい結果を返せる
  • 計算の「速度」を重視するならExcel、計算の「正確さ」を重視するならS-Calc

関連リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?