質問1についてはおっしゃる通りでいいかと思います。
「標準の数値書式指定文字列 | Microsoft Docs」によると...
指数表記が使用される場合、結果の指数部には、書式指定子が "G" のときには "E"、書式指定子が "g" のときには "e" というプレフィックスが付きます。 指数部には少なくとも 2 桁が含まれます。 これは、指数部に少なくとも 3 桁が含まれる、指数書式指定子によって生成される指数表記の書式とは異なります。
とのことで、指数部分は2桁以上で表示されるようですね。
質問2についてですが、「UnityCsReference/Mathf.cs at master · Unity-Technologies/UnityCsReference · GitHub」を見てみたところ、Approximately
は...
C#
1 // Compares two floating point values if they are similar.
2 public static bool Approximately(float a, float b)
3 {
4 // If a or b is zero, compare that the other is less or equal to epsilon.
5 // If neither a or b are 0, then find an epsilon that is good for
6 // comparing numbers at the maximum magnitude of a and b.
7 // Floating points have about 7 significant digits, so
8 // 1.000001f can be represented while 1.0000001f is rounded to zero,
9 // thus we could use an epsilon of 0.000001f for comparing values close to 1.
10 // We multiply this epsilon by the biggest magnitude of a and b.
11 return Abs(b - a) < Max(0.000001f * Max(Abs(a), Abs(b)), Epsilon * 8);
12 }
となっていました。2つの数の絶対値の大きさに合わせて判定のしきい値が変化するようになっており、大きい数同士の比較では判定が甘く、小さい数同士の比較では判定が厳しくなるようです。
私の環境(Unity 2020.2.1f1、プレイモード)で見てみたところ0.000001f * Mathf.Max(Mathf.Abs(a), Mathf.Abs(b))
は1.748456E-13
、Mathf.Epsilon * 8
は1.121039E-44
となっており、しきい値としては1.748456E-13
が採用され、一方Mathf.Abs(b - a)
は1.748456E-07
ですので、判定結果はfalse
となりました。
あれだと判定が厳しすぎるようでしたら、代わりにEpsilon * 8
の部分をもっと甘くしたメソッドを作ってもいいんじゃないでしょうか。
C#
1public static bool Approximately(float a, float b)
2{
3 return Mathf.Abs(b - a) < Mathf.Max(0.000001f * Mathf.Max(Mathf.Abs(a), Mathf.Abs(b)), 0.000001f);
4}
degForSin
というネーミングについては、私は恥ずかしながら英語は大して得意ではなく、英語圏の方が見たらどういう風に感じるのかは分からないのですが、個人的な印象では関係が逆のような感じがします(「ある正弦を生じる度数」みたいな感じでしょうか...要するにメソッドの引数ではなく、返り値の方がdegであるかのように感じます)。
「~の正弦」でしたら、単純に「sine of」とかでいいんじゃないでしょうか。他にも、検索してみたところ「SinDegree」なんてネーミングの例もあるようでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。