From 9bb03ead02aa7a9dc08179d0c7d2fd244ddc18b4 Mon Sep 17 00:00:00 2001 From: Niurouxing Date: Sun, 1 Sep 2024 00:07:42 +0800 Subject: [PATCH] 8.31 --- docs/APIs/Qu_property.md | 283 +++++++++++++++++++++++++++++++++++++++ docs/APIs/Qu_propoty.md | 56 -------- docs/scripts/style.css | 30 +++-- docs/scripts/style.js | 69 ++++++++-- 4 files changed, 361 insertions(+), 77 deletions(-) create mode 100644 docs/APIs/Qu_property.md delete mode 100644 docs/APIs/Qu_propoty.md diff --git a/docs/APIs/Qu_property.md b/docs/APIs/Qu_property.md new file mode 100644 index 0000000..cc85e74 --- /dev/null +++ b/docs/APIs/Qu_property.md @@ -0,0 +1,283 @@ +# Qu的成员 + +!!! info + 所有的`Qu`的成员全部为公有,可以直接访问。 + + + +=== "实数标量" + ##`data` + int + + 以32位整形实际存储的数据。 + !!! Warning + - 请不要直接折腾`data`,除非你知道自己在干什么。 + - 无论是否要求了符号位,`data`都是有符号的。 + +
+ + + ##`toDouble()` + double + + 返回实际代表的double值。 + !!! Example + ``` cpp + Qu, fracBits<2>, isSigned> a = 0.92; + std::cout << a.toDouble() << std::endl; + ``` + 输出: + ``` + 0.75 + ``` +
+ + ##`toString()` + std::string + + 返回比特串的字符串表示。 + + +
+ ##fill(disint) + Qu + + 将`Qu`填充为指定的值。将会返回`*this`,以便链式调用。 + === "" + 无参数时,将会填充可能范围内的随机均匀分布。 + !!! Example + ``` cpp + Qu<> a; + a.fill(); + ``` + === "dis" + 可以传入一个分布,将会填充为分布的值。 + + `QuBLAS.h`中预设了`UniRand`和`NormRand`两个分布。 + !!! Example + ``` cpp + Qu<> a; + a.fill(NormRand); + + Qu<> b; + b.fill(UniRand); + + Qu<> c; + std::normal_distribution myDis(1, 2); + c.fill(myDis); + ``` + === "int" + 传入一个整数,将会填充为这个整数。 + + 这里推荐使用二进制字面量,可以更直观的看到填充的值。 + !!! Example + ``` cpp + Qu<> a; + a.fill(0b1010); + a.display(); + ``` + 输出: + ``` + intBits: 8 fracBits: 8 isSigned: 1 Static + Binary: 00000000000001010 + Binary 32: 00000000000000000000000000001010 + Hex: a + Decimal: 0.0390625 + ``` + +
+ ##`display()` + + + 打印debug信息。 + !!! Example + ``` cpp + Qu, isSigned> a = 1; + a.display(); + ``` + 输出: + ``` + intBits: 8 fracBits: 12 isSigned: 1 Static + Binary: 000000001000000000000 + Binary 32: 00000000000000000001000000000000 + Hex: 1000 + Decimal: 1 + ``` + +
+ ##`operator <<` + ofstream + + 重载`<<`运算符,用于输出到流。将会输出实际代表的toDouble()值。 + !!! Example + ``` cpp + Qu, fracBits<2>, isSigned> a = 0.92; + std::cout << a << std::endl; + ``` + 输出: + ``` + 0.75 + ``` + +
+ ##operator = Any + Qu + + 重载`=`运算符,用于赋值。可以从`Qu`赋值给`Qu`,也可以从任意实数类型赋值给`Qu`,比如`int`、`double`等。 + + 当然了虽然说是"Any", 但是别整烂活传点奇怪的东西进去。 + + 需要注意的是,来自同样配置的`Qu`时会直接拷贝`data`,而来自不同配置的`Qu`时会进行转换,此时将会进行量化和溢出判断。 + + + + +=== "复数标量" + 大部分成员和实数标量一样。 + + ##`real` + Qu + + 实部。 + +
+ ##`imag` + Qu + + 虚部。 + +
+ ##fill(disint) + Qu + + 将复数填充为指定的值。将会对实部和虚部分别调用`fill()`。 + + +=== "张量" + ##`size` + dim + + 张量的大小。需要注意的是,这是一个`dim`类型,不是一个值。 + +
+ ##`data` + std::array + + 以`std::array`存储的数据。其中`N`为张量的大小。可以通过`size::elemSize`获取元素个数。 + +
+ ## operator [size_t ...] + Qu + + 重载`[]`运算符,用于访问张量的元素。 + + 具有两种重载形式:索引数量等于维度,或者索引仅为一个。 + + === "size_t ..." + 索引数量等于维度时,就是取出对应坐标的元素。 + + !!! Example + ``` cpp + Qu, Qu<>> mat = {1, 2, 3, 4}; + std::cout << mat[0][1] << std::endl; + ``` + + 输出: + ``` + 2 + ``` + + === "size_t" + 索引数量为单个索引时,是直接对`data`进行索引。 + + 这等效与`data[index]`。也就是Matlab中的单索引操作。 + + !!! Example + ``` cpp + Qu, Qu<>> mat = {1, 2, 3, 4}; + std::cout << mat[2] << std::endl; + ``` + 输出: + ``` + 3 + ``` + +
+ ##`display()` + + + 打印debug信息。效果为对每个元素调用`display()`。 + +
+ ##`clear()` + + + 将张量清零。 + +
+ ## fill(disint) + Qu + + 将张量填充为指定的值。 + + 和实数标量的`fill()`一样,只是这里是对每个元素都调用一次`fill()`。 + +
+ ##`shuffle()` + Qu + + 将张量打乱。将会返回`*this`,以便链式调用。 + +
+ ##`toDouble()` + std::array + + + 返回一个`std::array`,其中`N`为张量的大小。每个元素都是对应元素的`toDouble()`值。 + +
+ ##operator = Any + Qu + + 重载`=`运算符,用于从任何来源赋值。 + + 要求来源是一个可以被方括号索引的类型,比如`std::array`、`std::vector`或者另一个`Qu`张量。 + + 运行的过程是对范围为`0 : size::elemSize`的每个`i`调用来源的`[i]`索引,然后赋值给对应的元素。 + + !!! Warning + 请自行确保来源的大小和张量的大小一致,不会进行检查。 + + !!! Example + ``` cpp + Qu, Qu<>> mat; + std::array arr = {1, 2, 3, 4}; + mat = arr; + + std::vector vec = {1, 2, 3, 4}; + mat = vec; + + mat = {1, 2, 3, 4}; + ``` + +
+ ##‘operator <<’ + ofstream + + 重载`<<`运算符,用于输出到流。不同于`toDouble()`,这里的打印会尽可能地保持一个工整的格式。 + + !!! Example + ``` cpp + Qu, Qu<>> mat = {1, 2, 3, 4}; + std::cout << mat << std::endl; + ``` + 输出: + ``` + [1.0000, 3.0000 + 2.0000, 4.0000] + ``` + + + + + diff --git a/docs/APIs/Qu_propoty.md b/docs/APIs/Qu_propoty.md deleted file mode 100644 index ac4ef2e..0000000 --- a/docs/APIs/Qu_propoty.md +++ /dev/null @@ -1,56 +0,0 @@ -# Qu的成员 - -所有的`Qu`的成员全部为公有,可以直接访问。 - - - - - -=== "实数标量" - ##`data` - - - : 以32位整形实际存储的数据。 - !!! info - - 请不要直接折腾`data`,除非你知道自己在干什么。 - - 无论是否要求了符号位,`data`都是有符号的。 - - ##`display()` - - - : 打印debug信息。 - !!! Example - ``` cpp - Qu, isSigned> a = 1; - a.display(); - ``` - 输出: - ``` - intBits: 8 fracBits: 12 isSigned: 1 Static - Binary: 000000001000000000000 - Binary 32: 00000000000000000001000000000000 - Hex: 1000 - Decimal: 1 - ``` - - ##`operator <<` - ofstream - - : 重载`<<`运算符,用于输出到流。将会输出实际代表的double值。 - !!! Example - ``` cpp - Qu, fracBits<2>, isSigned> a = 0.92; - std::cout << a << std::endl; - ``` - 输出: - ``` - 0.75 - ``` - - - - -=== "复数标量" - - 222222 - -=== "张量" \ No newline at end of file diff --git a/docs/scripts/style.css b/docs/scripts/style.css index 81a18ed..d91fd8e 100644 --- a/docs/scripts/style.css +++ b/docs/scripts/style.css @@ -1,32 +1,36 @@ -.int { - color: #bbff79; - background-color: #2e3832; +.tag-shared-style { padding: 2px 5px; border-radius: 2px; font-family: Arial; + /* font-size: 16px; */ +} +.int { + color: #bbff79; + background-color: #2e3832; } -.constexpr { +.type { color: #e59752; background-color: #362f2e; - padding: 2px 5px; - border-radius: 2px; - font-family: Arial; } .void { color: #d1a8ff; background-color: #312f3e; - padding: 2px 5px; - border-radius: 2px; - font-family: Arial; } .default { color: #ff7b7b; background-color: #3a2e2e; - padding: 2px 5px; - border-radius: 2px; - font-family: Arial; +} + +.double { + color: #36a3dd; + background-color: #234753; +} + +.Qu { + color: #c9c325; + background-color: #32300f; } \ No newline at end of file diff --git a/docs/scripts/style.js b/docs/scripts/style.js index 4f892b7..2697147 100644 --- a/docs/scripts/style.js +++ b/docs/scripts/style.js @@ -1,16 +1,32 @@ class CustomInt extends HTMLElement { constructor() { super(); - this.innerText = "int"; // 设置默认显示文本 - this.className = "int"; // 应用相应的CSS类 + this.className = "int tag-shared-style"; // 应用相应的CSS类 + } + + connectedCallback() { + // 确保slot更改时更新组件 + // 如果组件内部直接使用内容而不是shadow DOM则不需要 + if (!this.shadowRoot) { + this.attachShadow({ mode: 'open' }); + this.shadowRoot.innerHTML = ``; + } } } -class CustomConstexpr extends HTMLElement { +class Customtype extends HTMLElement { constructor() { super(); - this.innerText = "constexpr"; // 设置默认显示文本 - this.className = "constexpr"; // 应用相应的CSS类 + this.className = "type tag-shared-style"; // 应用相应的CSS类 + } + + connectedCallback() { + // 确保slot更改时更新组件 + // 如果组件内部直接使用内容而不是shadow DOM则不需要 + if (!this.shadowRoot) { + this.attachShadow({ mode: 'open' }); + this.shadowRoot.innerHTML = ``; + } } } @@ -19,14 +35,48 @@ class CustomVoid extends HTMLElement { constructor() { super(); this.innerText = "void"; // 设置默认显示文本 - this.className = "void"; // 应用相应的CSS类 + this.className = "void tag-shared-style"; // 应用相应的CSS类 + } +} + +// double +class CustomDouble extends HTMLElement { + constructor() { + super(); + this.className = "double tag-shared-style"; // 应用相应的CSS类 + } + + connectedCallback() { + // 确保slot更改时更新组件 + // 如果组件内部直接使用内容而不是shadow DOM则不需要 + if (!this.shadowRoot) { + this.attachShadow({ mode: 'open' }); + this.shadowRoot.innerHTML = ``; + } + } +} + +// Qu +class CustomQu extends HTMLElement { + constructor() { + super(); + this.className = "Qu tag-shared-style"; // 应用相应的CSS类 + } + + connectedCallback() { + // 确保slot更改时更新组件 + // 如果组件内部直接使用内容而不是shadow DOM则不需要 + if (!this.shadowRoot) { + this.attachShadow({ mode: 'open' }); + this.shadowRoot.innerHTML = ``; + } } } class CustomDefault extends HTMLElement { constructor() { super(); - this.className = "default"; // 应用相应的CSS类 + this.className = "default tag-shared-style"; // 应用相应的CSS类 } connectedCallback() { @@ -41,9 +91,12 @@ class CustomDefault extends HTMLElement { + customElements.define('t-int', CustomInt); -customElements.define('t-constexpr', CustomConstexpr); +customElements.define('t-type', Customtype); customElements.define('t-void', CustomVoid); +customElements.define('t-double', CustomDouble); +customElements.define('t-qu', CustomQu); customElements.define('t-default', CustomDefault); \ No newline at end of file