link 未来から過去へ表示(*)
link 過去から未来へ表示

link もっと前
   2021年 2月 14日 ---> 2021年 2月 5日
link もっと後

2021年 2月 14日

USB Type-C DisplayPort Alternate mode

現在使っている ThinkPad E480 は USB Type-C 端子と HDMI 端子しかありません。先日(2021年 2月 12日の日記参照)新しく購入したディスプレイ 2つに画像を出力するには、USB Type-C の DisplayPort Alternate Mode(VESA の機能紹介のページ(英語))を使う必要があります。接続はこんな感じです。


E480 とデュアルディスプレイの接続

このとき E480 とディスプレイを繋ぐ USB Type-C ケーブルは 3つの役割を果たします。

  • USB 2.0/3.1 のデータ通信(ディスプレイが USB ハブになる)
  • USB Power Delivery による電力供給
  • DisplayPort Alternate Mode による画像出力

たった 1本の USB Type-C ケーブルで 3役もこなす凄いヤツです。今まで「AC アダプタ」「DisplayPort」「USB Type-A」の 3つに分かれていたコネクタが、USB Type-C 1つに統合できますから、省スペースが命のノート PC にとっては大歓迎の機能でしょう。

実はさほど便利じゃない

そんな凄いヤツを使い始めて数日ですが、既に嫌になってきました。正直な感想として、少なくともユーザーからすると便利と思えないし、使わなくて良いなら使いたくないです。

ケーブルの問題
1本で済むのは良いですが、ケーブルが硬すぎます。USB PD 対応 USB 3.1 ケーブルはかなり高速な信号を通す関係上、3重シールド 5〜6mm 幅以上のごついケーブルばかりです。これなら AC アダプタと HDMI 2本の方がまだマシです。どちらもかなり細いので。
E480 の問題
ノート PC の液晶、DisplayPort、HDMI の 3系統を使えると思いきや、3画面に拡張デスクトップを設定するとバグるので、ノート PC の液晶と DisplayPort をミラーにしています。ノート PC の液晶が完全に無意味ですが、蓋を閉めるとスリープしちゃうので、半開きでテーブルの隅に放置しています。切ない。
USB ハブの問題
ディスプレイが USB ハブの役目も果たしますが、ディスプレイの電源を切ると USB ハブとしての機能も OFF になります。マウス程度なら問題ありませんが、通信するような機器は繋ぐと毎回切られてストレス MAX です。あと USB オーディオ DAC は繋いでも動作しませんでした。何か制約があるんですかね?
USB PD の問題
ディスプレイ側の USB PD による供給力の上限は、現状 60W の製品が多いです。60W はノート PC によっては給電能力がギリギリです。ディスプレイの USB PD 供給能力が足りない場合、純正アダプタに戻して給電し出画は諦める or バッテリーを削りつつ DisplayPort Alt で出画する or ディスプレイを買い替える、究極の 3択を迫られます。

ケーブルの問題は今後、技術革新で細くなることを祈るしかありません。E480 の問題は回避策不明です。HW の制約?USB ハブの問題は、E480 なら USB Type-A コネクタが別にあるので、そちらを使えば回避可能です。USB PD の問題は今の所 E480 だと困っていません。

しかし将来的にノート PC を買い換えると USB PD の問題が起きる可能性があります。回避策はあるでしょうか?USB Type-C が 3つ付いていて、1つは DisplayPort、2つ目は USB PD 電源供給、3つ目は PC に繋ぐ、変なハブ的なものがあれば良い?もはや「ケーブル 1本で OK」のコンセプトは完全崩壊だし、ディスプレイ側の USB PD は死蔵確定です。そんな訳のわからんことになるなら、素直に DisplayPort と USB Type-C のコネクタ 2個付けてくれよって思います。

そもそも DislayPort と USB PD なんて全く無関係のものを統合したら、どちらか壊れただけで PC が機能不全になることくらい、聡明な VESA や USB-IF の面々には明らかなはずですけど、何でこんなデザインにしたんですかね?理解しがたいよ……。

USB PD と DisplayPort Alt Mode を見ると思い出すのは、あの商品

昔 SHARP SF1 という製品がありました(DIME の記事)。スーパーファミコンとテレビが 1つに合体した、当時小学生だった私には夢のような製品でした。配線なしで見た目スッキリ、場所も取らない、AC アダプタやビデオケーブルを接続する手間も不要、いかにも便利そうじゃないですか?結構お高いのもあって、友達が持っているのを見て羨ましかったです。USB Type-C も似たような売り文句です。

しかし後から聞くところによれば、テレビが故障するとスーパーファミコンを外せないから他のテレビに繋げなくて困る、逆にスーパーファミコンが故障するとテレビごと修理になって高ぇわテレビがなくなるわで困る、元より不便になっています。元々バラバラの製品を無理やり一蓮托生にしたら、そりゃそうなりますわな……。無関係の機能をデタラメに統合してはいけない、という好例です。

残念なことに USB Type-C も DisplayPort と USB PD の機能統合で、似たような落とし穴に落ちています。小学生の私に「21世紀になっても人類は SF1 と同じ過ちを繰り返しているよ」って教えてあげたいですね。

編集者: すずき(更新: 2021年 2月 15日 21:33)

コメント一覧

  • hdk 
    テレビデオも壊れたときがと聞いて買いませんでしたが、狭い学生宿舎で数年使えればいいだけならあれも手だったのかもとは思います。
    USB Type-Cのハブは、一本させば全部つながるというのなら、外して会議室や外出先に持ち出し・戻ってつなぐ用途では楽になりそうです。同様に使えるドッキングステーションやウルトラベースもありましたよね。 
    (2021年02月15日 06:24:17)
  • すずき 
    そうですね、1年だけとか、出張の時だけ、といった使い方にはとても便利だと思います。
    今回は常用したかったので、困りました。DisplayPort Alt mode は存在していただいて構わないんですけど、代わりの機能がないところが一番困ったところです。 
    (2021年02月15日 11:27:33)
open/close この記事にコメントする



2021年 2月 12日

在宅勤務環境改善

COVID-19 が流行し始めた昨年 2月ころ、在宅勤務が主となりました。当時の気持ちを正直に言えば「すぐ収束して、電車通勤に戻るだろう」で、完全にナメていました。在宅勤務の環境もまったく整えておらず、ダイニングテーブル、ノート PC+8インチのモバイルディスプレイでした。夕食時は邪魔だから、仕事道具をガサガサ片付ける、といった具合です。

そんなこんなで 1年間やってきたものの、COVID-19 の予想外の長期化、それに加えて会社方針(COVID-19 が収束しようとしまいと、今後は在宅勤務)もあって、在宅勤務の環境を改善することにしました。

部屋

家には、奥さんが一昨年の在宅勤務で使っていた部屋があって、幅 100cm の机と背もたれ付きのオフィスチェアがあります。そのスペースを譲ってもらうことにしました。

  • 1年目: 奥さん在宅勤務、私は電車通勤
  • 2年目: 2人共電車通勤
  • 3年目: 奥さん電車通勤、私は在宅勤務

すっかり勤務形態が逆転しました。会社のみなさんの話を聞くと、東京の狭い家で夫婦とも在宅勤務、子供まで自粛で家に居て、全く仕事にならん……みたいな地獄化したご家庭もあるみたい。我が家も夫婦同時に在宅勤務だと、スペースの確保がちょっと大変だったと思います。交代で在宅勤務になったのは、今思えば割とラッキーだったのかな?

テーブル

ダイニングテーブルはしっかりした作りで、間違いなく家で一番上等なテーブルです。一方のダイニングチェアは年中使い続けるような椅子ではなかったらしく、1年間酷使し続けたところ、座面、背面のクッションが潰れ椅子のフレームが腰にガツガツ当たるようになりました。痛ぇよーー。

部屋を移ってスペースが広がったので、大きめのデュアルディスプレイも目指します。幅 120cm の机を買い足し 100cm の机は横向きに合わせ L字にします。

買ったのは山善の AMDT-1260 AMDL-70 という一番シンプルな天板と脚だけのテーブルですAmazon へのリンク)。Amazon で 9,000円くらいとお安いです。理由はわからないですが、山善の公式サイトには載っていないんですよね。なぜだろね?

ディスプレイ

机の幅を考えると 27インチ x2 が載りそうです。ただし、机の奥行きがあまりない(60cm)ので、大きすぎると端が見えなくなって、かえって使いにくいです。という点を勘案して 24インチ x2 にします。

買ったのは EIZO FlexScan EV2480 です。Amazon で 1台 4万円くらい。デュアルディスプレイにしたので、総額 8万円くらい掛かりました。非常に高価ですが、これでも中位機種なんです。ちなみに上位機種の EV2495 は 1台 7万円します。強烈!

FlexScan は重たいのが難点(純正スタンドがめちゃ重い)ですが、変な色やら、映らないやらのトラブルは皆無で非常に快適です。以前勤めてた会社(パナソニックやソシオネクスト)でも大変お世話になりました。良いメーカーですよね。

編集者: すずき(更新: 2021年 2月 15日 11:41)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 2月 11日

デノーマルフラッシュの速度改善効果

先日(2021年 2月 5日の日記参照)非正規化数(Denormal 数)の計算は遅いと書きましたが、いかほどでしょうか?どのくらい遅いのか、デノーマルフラッシュでどの程度速くなるのか、この 2点について見ていこうと思います。

おそらく世の中のどの FPU も割り算が一番苦手なはずです。入力を正規化数、非正規化数の 2パターン用意して、下記の演算をたくさん実行してみます。

浮動小数点の割り算の速度を測るためのコード(中心部分)

#define SIZE    10000

union uuu {
	double f;
	long long n;
};

...

void test_speed(union uuu *val)
{
	for (int i = 0; i < SIZE; i++) {
		dst[i].f =
			val[i].f / 1.08f -
			val[i].f / 1.07f +
			val[i].f / 1.06f -
			val[i].f / 1.05f +
			val[i].f / 1.04f -
			val[i].f / 1.03f +
			val[i].f / 1.02f -
			val[i].f / 1.01f;
	}
}

コードは全部貼り付けると邪魔くさいので GitHub におきました(GitHub へのリンク)。前回の FTZ, DAZ のテストに使ったコードも一緒に入っています。

x86 系の CPU

まずは x86 系の CPU で測ってみましょう。手元にあるのは Zen 系(AMD Ryzen 7 2700)と、Atom 系(Intel Pentium J4205)なので、この 2つで測ります。コンパイラは gcc (Debian 10.2.1-6) 10.2.1 20210110、最適化レベルは O2 です。

Ryzen 7 2700 の結果(Linux 5.10.9-1)
10000 loops

Normal -----
FTZ:OFF, DAZ:OFF
  0.912859[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:OFF, DAZ:ON
  0.880695[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:OFF
  0.880633[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:ON
  0.880653[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)

Denormal -----
FTZ:OFF, DAZ:OFF
  1.806291[s]
  dst : -4.446591e-323(0x8000000000000009)
FTZ:OFF, DAZ:ON
  0.783578[s]
  dst : 0.000000e+00(0x00000000)
FTZ:ON, DAZ:OFF
  1.513203[s]
  dst : 0.000000e+00(0x00000000)
FTZ:ON, DAZ:ON
  0.783183[s]
  dst : 0.000000e+00(0x00000000)
Pentium J4205 の結果(Linux 5.4.95)
1000 loops

Normal -----
FTZ:OFF, DAZ:OFF
  1.024671[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:OFF, DAZ:ON
  1.025767[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:OFF
  1.025151[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:ON
  1.027414[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)

Denormal -----
FTZ:OFF, DAZ:OFF
  12.147070[s]
  dst : -4.446591e-323(0x8000000000000009)
FTZ:OFF, DAZ:ON
  0.309857[s]
  dst : 0.000000e+00(0x00000000)
FTZ:ON, DAZ:OFF
  7.126950[s]
  dst : 0.000000e+00(0x00000000)
FTZ:ON, DAZ:ON
  0.312373[s]
  dst : 0.000000e+00(0x00000000)

Ryzen 7 2700 でも Pentium J4205 でも、Denormal 数が計算に出現すると遅くなりますが、J4205 はその傾向が顕著で 10倍くらい遅いです。FTZ, DAZ を ON にすると、効果覿面に速くなります。

ARM 系の CPU

次に ARM で測ってみましょう。手元にあるのは RK3399 です。Cortex-A72 と Cortex-A53 が混載されているので、両方で測ります。カーネルは Linux 5.11.0-rc3-next-20210113、コンパイラは gcc (Debian 8.3.0-6) 8.3.0、最適化レベルは O2 です。

ARM は仕様上 FTZ と DAZ が分かれていない(FZ という両方合わせたような機能がある)ので、片方だけ ON にした結果はありません。

Cortex-A72 の結果
$ taskset 0x10 ./a.out 10000

...

10000 loops

Normal -----
FTZ:OFF, DAZ:OFF
  7.153237[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:ON
  7.118581[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)

Denormal -----
FTZ:OFF, DAZ:OFF
  8.008282[s]
  dst : -4.446591e-323(0x8000000000000009)
FTZ:ON, DAZ:ON
  1.779883[s]
  dst : 0.000000e+00(0x00000000)
Cortex-A53 の結果
$ taskset 0x1 ./a.out 10000

...

10000 loops

Normal -----
FTZ:OFF, DAZ:OFF
  11.693382[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)
FTZ:ON, DAZ:ON
  11.691307[s]
  dst : -3.668038e-02(0xbfa2c7c56ca81140)

Denormal -----
FTZ:OFF, DAZ:OFF
  12.196882[s]
  dst : -4.446591e-323(0x8000000000000009)
FTZ:ON, DAZ:ON
  11.697961[s]
  dst : 0.000000e+00(0x00000000)

Cortex-A72 はデノーマルフラッシュの効果抜群ですが、Cortex-A53 はデノーマルフラッシュによる変化はほとんどありません。どちらも ARM が設計した同世代の CPU にも関わらず、速度の傾向は大きく異なります。詳細な理由は ARM にしかわかりませんが、なかなか興味深い結果です。

編集者: すずき(更新: 2021年 2月 13日 02:10)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 2月 8日

民主主義と人口ピラミッド

最近の日本やら先進国やらの迷走を見ていると、民主主義って人口ピラミッドが逆転することを考慮できていないのでは?と疑問を感じます。

人口ピラミッドが逆転して高齢世代が主流派になると、

  • 人数少の若年世代は支援しない
  • 人数多の高齢世代は支援する

このような政策が支持されるので、少子化はさらに加速し、先のない高齢世代に最大投資しまくる、まさに今の日本みたいな状態になります。当然ながら経済力は下がる一方ですし、滅亡一直線の国家です。

民主主義のバグとしか思えないですね……。

編集者: すずき(更新: 2021年 2月 27日 23:12)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2021年 2月 6日

レガシィの半年点検

ディーラーから電話がかかってきて「(車検と一緒にセットで頼んだ)半年点検どうしましょうか?」と聞かれました。実は頼んだことを忘れていたので、確認してもらって助かりました。「半年前の車検で一緒にご依頼されました半年点検なんですが〜」と説明が妙に手慣れた感じだったところを見るに、頼んでおいて忘れてしまう、私みたいな人が多いんだな〜なんて思った。

点検結果はというと、走行系の異常はありませんでした。フロントのウォッシャー液を送るゴムホースが破損していて、フロントのウォッシャー液が出ないうえ、むりやり使ったらエンジンルームにダダ漏れするそうです。え、そうなの??全く気づいていませんでした。ウォッシャー液って全然使わないんだよね……。

部品の取り寄せが要るためすぐには直せず、修理の際はご予約いただきたい、とのことだったので、またどこかの土曜日にでも持っていこうと思います。

スバルのセダンは 1つだけ

私のようなおじさんがディーラーに行くと、新車のカタログをたくさん渡されて「新車どうです?」って話されるんですが、最近のスバルではなーんにも聞かれません。今のスバルはレガシィ B4 GT の乗り換え先がないからです。

スバルの現行車種でセダンはインプレッサ G4 だけです。G4 は上級グレードの 2.0i でも、2リッター NA(154馬力)です。レガシィ B4 GT の 2リッターターボ(280馬力)から乗り換えると大幅パワーダウンは否めず、おすすめしづらいのでしょう。現にディーラーでもカタログだけもらったものの、ほとんどプッシュされませんでした。

ちょっと前なら、インプレッサ WRX S4 STI Sport がありましたが、生産終了してしまいました。仮に現行車種だったとしても、一般人向けとは思えんし、気軽に「WRX S4 いかがですか?」とは言いにくいでしょう。スバルのディーラーにとってセダン乗りは鬼門ですね。

編集者: すずき(更新: 2021年 2月 13日 02:56)

コメント一覧

  • hdk 
    トヨタのディーラーではときどき聞かれます。まぁハッチバックコンパクトカーというジャンルなので確かに車種は豊富なんですが、4人乗り全長3000mmの新車は他社を含めてももう1台もないのに... 
    (2021年02月13日 08:17:11)
  • すずき 
    そこまで珍しいと、売る側としてももう諦めて……って感じでしょうね。 
    (2021年02月13日 15:13:53)
open/close この記事にコメントする



2021年 2月 5日

デノーマルフラッシュ

浮動小数点数の演算では IEEE 754 という規格があり、x86 系のプロセッサはこの規格に基づいた演算を行っています。規格のなかに非正規化数(Denormal Number もしくは Subnormal Number とも)という、極めて小さい特殊な数のカテゴリがあります(参考: IEEE 754 - Wikipedia)。

通常は Denormal 数も正確に演算しますが、Denormal 数の演算は遅いです。計算精度より計算速度が重要な場面では MXCSR レジスタに特殊なフラグを設定することで、Denormal 数の扱いを変更し、高速に演算することができます(参考: FTZ フラグと DAZ フラグの設定 - インテル C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス)。

基本的には Denormal 数を無視して 0 として扱うようにしますが、Intel のプロセッサでは入力側と出力側を別々に扱えるようです。設定可能なフラグは 2つあります。デノーマルフラッシュって必殺技の名前っぽいよね。どうでもいいけど。

FTZ (Flush To Zero)
演算結果が Denormal 数だった場合、ゼロとして扱う。
有効にする方法 _MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON)
DAZ (Denormals Are Zeros)
入力が Denormal 数だった場合、ゼロとして扱う。
有効にする方法 _MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON)

うーん。わかるような、わからないような。こういうときは実際に動かしてどんな結果になるか試すのが一番良いでしょう。FTZ と DAZ を有効にする方法は Intel コンパイラの説明から抜粋したものですが、GCC でも全く同じ方法で利用可能です。

Denormal Flush の実験プログラム

#include <stdint.h>
#include <stdio.h>
#include <pmmintrin.h>

double zero = 0.0f;

union {
	double f;
	long long n;
} a, b, c, d, ab, ac, ca, dc;

void test()
{
	a.n = 0x0008000000000000ULL;
	b.n = 0x0004000000000000ULL;
	c.n = 0x0010000000000000ULL;
	d.n = 0x0014000000000000ULL;
	ab.f = a.f + b.f;
	ac.f = a.f + c.f;
	ca.f = c.f - a.f;
	dc.f = d.f - c.f;

	printf("  a   : %e(0x%08llx)\n"
		"  b   : %e(0x%08llx)\n"
		"  c   : %e(0x%08llx)\n"
		"  d   : %e(0x%08llx)\n"
		"  a+b : %e(0x%08llx)\n"
		"  a+c : %e(0x%08llx)\n"
		"  c-a : %e(0x%08llx)\n"
		"  d-c : %e(0x%08llx)\n"
		"  a==0: %d\n\n",
		a.f, a.n, b.f, b.n, c.f, c.n, d.f, d.n,
		ab.f, ab.n, ac.f, ac.n, ca.f, ca.n, dc.f, dc.n,
		a.f == zero);
}

int main(int argc, char *argv[])
{
	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF);
	_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF);
	printf("FTZ:OFF, DAZ:OFF\n");
	test();

	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_OFF);
	_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
	printf("FTZ:OFF, DAZ:ON\n");
	test();

	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
	_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_OFF);
	printf("FTZ:ON, DAZ:OFF\n");
	test();

	_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
	_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
	printf("FTZ:ON, DAZ:ON\n");
	test();

	return 0;
}

変数 a と b は Denormal 数です(double の exponent 部分が 0)。変数 c は非常に小さいですが通常の数です。最後の a.f == zero は Denormal 数と 0 を比較したときに、等しければ 1、等しくなければ 0 が出力されます。実行結果とともに説明したほうが良いと思うので、実行結果を示します。

Denormal Flush の動作確認
$ gcc a.c && ./a.out

FTZ:OFF, DAZ:OFF
  a   : 1.112537e-308(0x8000000000000)
  b   : 5.562685e-309(0x4000000000000)
  c   : 2.225074e-308(0x10000000000000)
  d   : 2.781342e-308(0x14000000000000)
  a+b : 1.668805e-308(0xc000000000000)  ★Denorm1 + Denorm2 = Denorm3
  a+c : 3.337611e-308(0x18000000000000) ★Denorm1 + Normal1 = Normal1+α
  c-a : 1.112537e-308(0x8000000000000)  ★Normal1 - Denorm1 = Denorm4
  d-c : 5.562685e-309(0x4000000000000)  ★Normal2 - Normal1 = Denorm5
  a==0: 0                               ★Denorm1 == 0      ? いいえ

FTZ:OFF, DAZ:ON
  a   : 1.112537e-308(0x8000000000000)
  b   : 5.562685e-309(0x4000000000000)
  c   : 2.225074e-308(0x10000000000000)
  d   : 2.781342e-308(0x14000000000000)
  a+b : 0.000000e+00(0x00000000)        ★Denorm1 + Denorm2 = 0(※1)
  a+c : 2.225074e-308(0x10000000000000) ★Denorm1 + Normal1 = Normal1 → 入力の Denormal が 0 扱い = DAZ
  c-a : 2.225074e-308(0x10000000000000) ★Normal1 - Denorm1 = Normal1 → 入力の Denormal が 0 扱い = DAZ
  d-c : 5.562685e-309(0x4000000000000)  ★Normal2 - Normal1 = Denorm5
  a==0: 1                               ★Denorm1 == 0      ? はい → 入力の Denormal が 0 扱い = DAZ

FTZ:ON, DAZ:OFF
  a   : 1.112537e-308(0x8000000000000)
  b   : 5.562685e-309(0x4000000000000)
  c   : 2.225074e-308(0x10000000000000)
  d   : 2.781342e-308(0x14000000000000)
  a+b : 0.000000e+00(0x00000000)        ★Denorm1 + Denorm2 = 0(※1)
  a+c : 3.337611e-308(0x18000000000000) ★Denorm1 + Normal1 = Normal1+α
  c-a : 0.000000e+00(0x00000000)        ★Normal1 - Denorm1 = 0 → 演算結果の Denormal が 0 扱い = FTZ
  d-c : 0.000000e+00(0x00000000)        ★Normal2 - Normal1 = 0 → 演算結果の Denormal が 0 扱い = FTZ
  a==0: 0                               ★Denorm1 == 0      ? いいえ

FTZ:ON, DAZ:ON
  a   : 1.112537e-308(0x8000000000000)
  b   : 5.562685e-309(0x4000000000000)
  c   : 2.225074e-308(0x10000000000000)
  d   : 2.781342e-308(0x14000000000000)
  a+b : 0.000000e+00(0x00000000)        ★Denorm1 + Denorm2 = 0(※1)
  a+c : 2.225074e-308(0x10000000000000) ★Denorm1 + Normal1 = Normal1 → 入力の Denormal が 0 扱い = DAZ
  c-a : 2.225074e-308(0x10000000000000) ★Normal1 - Denorm1 = Normal1 → 入力の Denormal が 0 扱い = DAZ
  d-c : 0.000000e+00(0x00000000)        ★Normal2 - Normal1 = 0   → 演算結果の Denormal が 0 扱い = FTZ
  a==0: 1                               ★Denorm1 == 0      ? はい → 入力の Denormal が 0 扱い = DAZ

(※1)演算結果だけでは、入力の Denormal 数が両方 0 扱いなのか、結果の Denormal 数が 0 扱いなのか、判別できない。

FTZ と DAZ が発生する例を示したつもりです。できるだけ頑張って説明してみたんですが、良くわからなかったらごめんなさい。

編集者: すずき(更新: 2021年 2月 6日 03:08)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
   2021年 2月 14日 ---> 2021年 2月 5日
link もっと後

管理用メニュー

link 記事を新規作成

合計:  counter total
本日:  counter today

link About www.katsuster.net
RDF ファイル RSS 1.0
QR コード QR コード

最終更新: 3/6 03:18

カレンダー

<2021>
<<<02>>>
-123456
78910111213
14151617181920
21222324252627
28------

最近のコメント 5件

  • link 21年02月28日
    すずき 「ですね、その辺りも違います。違いを全部示...」
    (更新:03/06 00:21)
  • link 21年02月28日
    hdk 「109と109Aって、かなの記号も違うん...」
    (更新:03/05 21:43)
  • link 21年02月14日
    すずき 「そうですね、1年だけとか、出張の時だけ、...」
    (更新:02/15 11:27)
  • link 21年02月14日
    hdk 「テレビデオも壊れたときがと聞いて買いませ...」
    (更新:02/15 06:24)
  • link 21年02月06日
    すずき 「そこまで珍しいと、売る側としてももう諦め...」
    (更新:02/13 15:13)

最近の記事 3件

link もっとみる
  • link 21年03月04日
    すずき 「[VSCode を使って Windows から Linux ア] ...」
    (更新:03/06 03:18)
  • link 21年03月03日
    すずき 「[VSCode を使って Windows から Linux ア] ...」
    (更新:03/06 02:30)
  • link 21年02月28日
    すずき 「[JIS 配列キーボードと OADG 配列キーボード] 今まで、い...」
    (更新:03/05 18:34)

こんてんつ

open/close wiki
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報