ToDo:
Function[]に包まれないSlot[]は、
In[1]:= {#}
???General::slot: Undefined Slot #1:
{#}
^
???-FFS-Error-?Undefined command or element: {#}
のように、きちんとsemantics errorになるが、 Function[]に包まれないSlotSequence[]は、
In[1]:= {##}
セグメントエラー(coreを出力しました)
のように、segmentation faultになる
この結果は、あなたの予想通りですか?
FFS;
l = {
11.11111111111,
11.111111111111,
11.1111111111111,
11.11111111111111,
11.111111111111111,
11.1111111111111111,
11.11111111111111111,
11.111111111111111111,
11.1111111111111111111,
11.11111111111111111111,
11.111111111111111111111,
11.1111111111111111111111,
11.11111111111111111111111,
11.111111111111111111111111,
11.1111111111111111111111111,
11.11111111111111111111111111,
11.111111111111111111111111111,
11.1111111111111111111111111111,
11.11111111111111111111111111111,
11.111111111111111111111111111111,
11.1111111111111111111111111111111,
11.11111111111111111111111111111111,
Null[]};
Scan[With[{a = #}, Print[Map[SameQ[a, #]&, l]]]&, l]; Exit[];
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
{0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
{0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
{0,0,0,1,0,0,0,1,1,1,1,1,0,1,0,0,1,1,1,1,1,1}
何が問題か分からないかった人は次のサンプルをご覧有れ!
String2RealConvTest[max_Real:40] := Module[{reference, min, loop, s, i},
reference = 1 / 11;
s = "0.";
loop = "09";
min = 1;
Table[(s = s//loop[1 + Mod[i - 1, StringLength[loop]]];
Print[StringFill[s, " ", max + 2], " - 1 / 9 -> ",
ToExpression[s] - reference]), {i, min, max}]];
String2RealConvTest[]; Exit[];
0.0 - 1 / 9 -> -.090909090909091
0.09 - 1 / 9 -> -9.090909090909E-4
0.090 - 1 / 9 -> -9.090909090909E-4
0.0909 - 1 / 9 -> -9.090909090917E-6
0.09090 - 1 / 9 -> -9.090909090917E-6
0.090909 - 1 / 9 -> -9.090909090792E-8
0.0909090 - 1 / 9 -> -9.090909090792E-8
0.09090909 - 1 / 9 -> -9.09090913659E-10
0.090909090 - 1 / 9 -> -9.09090913659E-10
0.0909090909 - 1 / 9 -> -9.09090858148E-12
0.09090909090 - 1 / 9 -> -9.09090858148E-12
0.090909090909 - 1 / 9 -> -9.0913387929E-14
0.0909090909090 - 1 / 9 -> -9.0913387929E-14
0.09090909090909 - 1 / 9 -> -9.15933995316E-16
0.090909090909090 - 1 / 9 -> -9.15933995316E-16
0.0909090909090909 - 1 / 9 -> -1.38777878078E-17
0.09090909090909090 - 1 / 9 -> -1.38777878078E-17
0.090909090909090909 - 1 / 9 -> 0
0.0909090909090909090 - 1 / 9 -> 0
0.09090909090909090909 - 1 / 9 -> 0
0.090909090909090909090 - 1 / 9 -> 1.387778780781E-17
0.0909090909090909090909 - 1 / 9 -> 1.387778780781E-17
0.09090909090909090909090 - 1 / 9 -> 1.387778780781E-17
0.090909090909090909090909 - 1 / 9 -> 1.387778780781E-17
0.0909090909090909090909090 - 1 / 9 -> 2.775557561563E-17
0.09090909090909090909090909 - 1 / 9 -> 2.775557561563E-17
0.090909090909090909090909090 - 1 / 9 -> 2.775557561563E-17
0.0909090909090909090909090909 - 1 / 9 -> 1.387778780781E-17
0.09090909090909090909090909090 - 1 / 9 -> 2.775557561563E-17
0.090909090909090909090909090909 - 1 / 9 -> 2.775557561563E-17
0.0909090909090909090909090909090 - 1 / 9 -> 2.775557561563E-17
0.09090909090909090909090909090909 - 1 / 9 -> 2.775557561563E-17
0.090909090909090909090909090909090 - 1 / 9 -> 1.387778780781E-17
0.0909090909090909090909090909090909 - 1 / 9 -> 1.387778780781E-17
0.09090909090909090909090909090909090 - 1 / 9 -> 1.387778780781E-17
0.090909090909090909090909090909090909 - 1 / 9 -> 2.775557561563E-17
0.0909090909090909090909090909090909090 - 1 / 9 -> 1.387778780781E-17
0.09090909090909090909090909090909090909 - 1 / 9 -> 2.775557561563E-17
0.090909090909090909090909090909090909090 - 1 / 9 -> 2.775557561563E-17
0.0909090909090909090909090909090909090909 - 1 / 9 -> 1.387778780781E-17
つまり、十進数で記述の精度を真の値に向けて増大させたときに、 SAD内部表現であるReal型の値が真の値に収束するわけではない ということ
例えば、実数のデータ列をWrite[]で書き出した結果をRead[]してくると Real型としては元の値との同一性が保証されないということ。 実例は以下のサンプル参照のこと。
例えば、数値計算の精度をテストするユニットテストの記述時に 標準値をユニットテスト内に記述した段階で、その値が 元の計算値から変化する可能性が有ります。
String2RealConvTest[max_Real:10] := Module[{x, s, i}, StandardForm[
x = 1 - 1e-3;
Table[(x = (1 + x) / 2;
s = ToString[x];
Print[(" "//ToString[i])[-3,-1],
": x=", x, " s=", s, " diff=", ToExpression[s] - x];
), {i, 1, max}];
]];
String2RealConvTest[45]; Exit[0];
1: x=.9995 s=".9995" diff=0
2: x=.99975 s=".99975" diff=0
3: x=.999875 s=".999875" diff=-1.11022302463E-16
4: x=.9999375 s=".9999375" diff=0
5: x=.99996875 s=".99996875" diff=-1.11022302463E-16
6: x=.999984375 s=".999984375" diff=0
7: x=.9999921875 s=".9999921875" diff=0
8: x=.99999609375 s=".99999609375" diff=0
9: x=.999998046875 s=".999998046875" diff=0
10: x=.9999990234375 s=".9999990234375" diff=0
11: x=.99999951171875 s=".99999951171875" diff=0
12: x=.999999755859375 s=".999999755859375" diff=0
13: x=.999999877929688 s=".999999877929688" diff=5.551115123126E-16
14: x=.999999938964844 s=".999999938964844" diff=2.22044604925E-16
15: x=.999999969482422 s=".999999969482422" diff=1.110223024625E-16
16: x=.999999984741211 s=".999999984741211" diff=1.110223024625E-16
17: x=.999999992370605 s=".999999992370605" diff=-4.4408920985E-16
18: x=.999999996185303 s=".999999996185303" diff=2.22044604925E-16
19: x=.999999998092651 s=".999999998092651" diff=-3.33066907388E-16
20: x=.999999999046326 s=".999999999046326" diff=2.22044604925E-16
21: x=.999999999523163 s=".999999999523163" diff=1.110223024625E-16
22: x=.999999999761581 s=".999999999761581" diff=-3.33066907388E-16
23: x=.999999999880791 s=".999999999880791" diff=3.330669073875E-16
24: x=.999999999940395 s=".999999999940395" diff=-3.33066907388E-16
25: x=.999999999970198 s=".999999999970198" diff=3.330669073875E-16
26: x=.999999999985099 s=".999999999985099" diff=2.22044604925E-16
27: x=.999999999992549 s=".999999999992549" diff=-4.4408920985E-16
28: x=.999999999996275 s=".999999999996275" diff=2.22044604925E-16
29: x=.999999999998137 s=".999999999998137" diff=-3.33066907388E-16
30: x=.999999999999069 s=".999999999999069" diff=2.22044604925E-16
31: x=.999999999999534 s=".999999999999534" diff=-3.33066907388E-16
32: x=.999999999999767 s=".999999999999767" diff=-2.22044604925E-16
33: x=.999999999999884 s=".999999999999884" diff=3.330669073875E-16
34: x=.999999999999942 s=".999999999999942" diff=2.22044604925E-16
35: x=.999999999999971 s=".999999999999971" diff=1.110223024625E-16
36: x=.999999999999985 s=".999999999999985" diff=-4.4408920985E-16
37: x=.999999999999993 s=".999999999999993" diff=3.330669073875E-16
38: x=.999999999999996 s=".999999999999996" diff=-3.33066907388E-16
39: x=.999999999999998 s=".999999999999998" diff=-2.22044604925E-16
40: x=.999999999999999 s=".999999999999999" diff=-1.11022302463E-16
41: x=1 s="1" diff=4.440892098501E-16
42: x=1 s="1" diff=2.22044604925E-16
43: x=1 s="1" diff=1.110223024625E-16
44: x=1 s="1" diff=0
45: x=1 s="1" diff=0
LHC Collision OpticsでHorizontal Dispersionを条件に入れると、 CELLモードでなんかうまくマッチングが取れない。
Corssing Angle無しのモデルだと問題なくできるので、 IPの Vertical Crossing Angleが諸悪の根源のようです。
IPの Vertical Bump付近に Couplingも残っているようなので それも含めると自由度足りないが、Couplingパラメータは拘束していない はずなのだが...
Couplingの変化がIRの外に伝搬して境界での Twissパラメータの拘束条件に 悪影響を与えてるのかな?
旧レポジトリコンテンツのcoding変換サポートの綺麗な再実装(実装した 2023/04/03)
スタブとして変更が必要なの部分
実運用で必要な変更
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記